RePlugin 插件化-內置加載

PS:插件化是什麼這裏就再也不說了,從這裏開始兩種加載方式中的一種(內置加載),該框架是奇虎360開發的,官方給出優勢

RePlugin是一套完整的、穩定的、適合全面使用的,佔坑類插件化方案。咱們「逐詞」拆開來解釋這個定義:

完整的:讓插件運行起來「像單品那樣」,支持大部分特性
穩定的:如此靈活完整的狀況下,其框架崩潰率僅爲業內很低的「萬分之一」
適合全面使用的:其目的是讓應用內的「全部功能皆爲插件」
佔坑類:以穩定爲前提的Manifest佔坑思路
插件化方案:基於Android原生API和語言來開發,充分利用原生特性

簡單使用

加載方式java

  • 內置加載
  • 外置加載

內置加載

1:在項目根目錄的 build.gradle 下添加 RePlugin Host Gradle 依賴:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        // 一、添加RePlugin Host Gradle依賴
        classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.1'
    }
}

2:在 app/build.gradle 下添加 RePlugin Host Library 依賴

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "cn.codingblock.repluginstudy"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
//有用
apply plugin: 'replugin-host-gradle'// 集成 RePlugin 添加的配置

// 集成 RePlugin 添加的配置
repluginHostConfig {
    useAppCompat = true // 若是項目須要支持 AppComat,則須要將此配置置爲 true
    // 若是應用須要個性化配置坑位數量,則須要添加如下代碼進行配置
//    countNotTranslucentStandard = 6
//    countNotTranslucentSingleTop = 2
//    countNotTranslucentSingleTask = 3
//    countNotTranslucentSingleInstance = 2
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.qihoo360.replugin:replugin-host-lib:2.2.1' // 集成 RePlugin 添加的配置
    testCompile 'junit:junit:4.12'
}

3:讓工程的 Application 直接繼承自 RePluginApplication

不繼承的以下android

public class MyApplication extends Application {

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        RePlugin.App.attachBaseContext(this);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        RePlugin.App.onCreate();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        RePlugin.App.onLowMemory();
    }

    @Override
    public void onTrimMemory(int level) {
        super.onTrimMemory(level);
        RePlugin.App.onTrimMemory(level);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        RePlugin.App.onConfigurationChanged(newConfig);
    }
}

在 AndroidManifest 對 MyApplication 的相關配置併發

插件apk項目建立

4:根目錄的 build.gradle 添加 RePlugin Plugin Gradle 依賴(如果單首創建插件工程,則不須要添加註釋1下面的代碼):

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        // 一、添加RePlugin Host Gradle依賴(主工程用)
        classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.1'
        // 二、添加RePlugin Plugin Gradle依賴(插件工程用)
        classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.1'
    }
}

5:在 app/build.gradle 中添加 replugin-plugin-gradle 插件和 replugin-plugin-lib 依賴:

apply plugin: 'com.android.application'

android {
    ...
}

apply plugin: 'replugin-plugin-gradle' // 集成 RePlugin 添加的配置

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.qihoo360.replugin:replugin-plugin-lib:2.2.1' // 集成 RePlugin 添加的配置
    testCompile 'junit:junit:4.12'
}

6:Androidmanifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.my.myreplugintest2">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
       == android:exported="true"==

        >
        <activity android:name=".MainActivity"
            android:theme="@style/AppTheme"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

       == <!--插件名稱-->
        <meta-data
            android:name="com.my.myreplugintest2.name"
            android:value="plugin1"/>
        <!--插件版本-->
        <meta-data
            android:name="com.my.myreplugintest2.version.ver"
            android:value="1"/>==
    </application>

</manifest>

設置成暴露exported="true",而後設置別名app

說明:meta-data下的name是包名+name,包名+version.var框架

而後打成apkide

(內置於 APP 之中,並隨 APP 一併發版,須要將插件 apk 改爲 .jar 結尾放入主程序的assets/plugins目錄。)gradle

7:主程序運行

在主程序中與java文件同級,建立assets/plugins目錄,把打好的apk修更名字爲 plugin1.jar(plugin1是個人別名)ui

RePlugin.startActivity(MainActivity.this, RePlugin.createIntent("plugin1", "com.my.myreplugintest2.MainActivity"));

plugin1爲插件別名。com.my.myreplugintest2.MainActivity是插件文件的位置。this

相關文章
相關標籤/搜索