RePlugin是一套完整的、穩定的、適合全面使用的,佔坑類插件化方案。咱們「逐詞」拆開來解釋這個定義: 完整的:讓插件運行起來「像單品那樣」,支持大部分特性 穩定的:如此靈活完整的狀況下,其框架崩潰率僅爲業內很低的「萬分之一」 適合全面使用的:其目的是讓應用內的「全部功能皆爲插件」 佔坑類:以穩定爲前提的Manifest佔坑思路 插件化方案:基於Android原生API和語言來開發,充分利用原生特性
加載方式java
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' } }
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' }
不繼承的以下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 的相關配置併發
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' } }
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' }
<?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
在主程序中與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