Android外掛化——Replugin入門(一)
阿新 • • 發佈:2018-12-18
一、360Replugin簡介
RePlugin是一套完整的、穩定的、適合全面使用的,佔坑類外掛化方案,由360手機衛士的RePlugin Team研發,也是業內首個提出”全面外掛化“(全面特性、全面相容、全面使用)的方案。
其主要優勢有:
- 極其靈活:主程式無需升級(無需在Manifest中預埋元件),即可支援新增的四大元件,甚至全新的外掛
- 非常穩定:Hook點僅有一處(ClassLoader),無任何Binder Hook!如此可做到其崩潰率僅為“萬分之一”,並完美相容市面上近乎所有的Android ROM
- 特性豐富:支援近乎所有在“單品”開發時的特性。包括靜態Receiver、Task-Affinity坑位、自定義Theme、程序坑位、AppCompat、DataBinding等
- 易於整合:無論外掛還是主程式,只需“數行”就能完成接入
- 管理成熟:擁有成熟穩定的“外掛管理方案”,支援外掛安裝、升級、解除安裝、版本管理,甚至包括程序通訊、協議版本、安全校驗等
- 數億支撐:有360手機衛士龐大的數億使用者做支撐,三年多的殘酷驗證,確保App用到的方案是最穩定、最適合使用的
二、Replugin支援外掛方式
1.內建外掛
內建外掛是將編譯好的apk(將APK改名為:[外掛名].jar)放入宿主程式的assets/plugins目錄,作為宿主的外掛
2.外接外掛
外接外掛是指可通過“下載”apk、“放入SD卡”等方式來安裝並執行的外掛
三、Replugin接入
1.宿主程式(主程式)接入
第 1 步:新增 RePlugin Host Gradle 依賴
在專案根目錄的 build.gradle(注意:不是 app/build.gradle) 中新增 replugin-host-gradle 依賴:
buildscript {
dependencies {
classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.4'
...
}
}
第 2 步:新增 RePlugin Host Library 依賴
在 app/build.gradle 中應用 replugin-host-gradle
apply plugin: 'replugin-host-gradle'
/**
* 配置項均為可選配置,預設無需新增
* 更多可選配置項參見replugin-host-gradle的RepluginConfig類
* 可更改配置項參見 自動生成RePluginHostConfig.java
*/
repluginHostConfig {
/**
* 是否使用 AppCompat 庫
* 不需要個性化配置時,無需新增
*/
useAppCompat = true
/**
* 背景不透明的坑的數量
* 不需要個性化配置時,無需新增
*/
countNotTranslucentStandard = 6
countNotTranslucentSingleTop = 2
countNotTranslucentSingleTask = 3
countNotTranslucentSingleInstance = 2
}
dependencies {
compile 'com.qihoo360.replugin:replugin-host-lib:2.2.4'
...
}
注意事項:
- 請將apply plugin: 'replugin-host-gradle'放在 android{} 塊之後,防止出現無法讀取applicationId,導致生成的坑位出現異常
- 如果您的應用需要支援AppComat,則除了在主程式中引入AppComat-v7包以外,還需要在宿主的build.gradle中新增下面的程式碼若不支援AppComat則請不要設定此項:
repluginHostConfig {
useAppCompat = true
}
- 如果您的應用需要個性化配置坑位數量,則需要在宿主的build.gradle中新增下面的程式碼
repluginHostConfig {
/**
* 背景不透明的坑的數量
*/
countNotTranslucentStandard = 6
countNotTranslucentSingleTop = 2
countNotTranslucentSingleTask = 3
countNotTranslucentSingleInstance = 2
}
第 3 步:配置 Application 類
讓工程的 Application 直接繼承自 RePluginApplication。
如果您的工程已有Application類,則可以將基類切換到RePluginApplication即可。或者您也可以用“非繼承式”接入。
public class MainApplication extends RePluginApplication {
}
既然聲明瞭Application,自然還需要在AndroidManifest中配置這個Application。
<application
android:name=".MainApplication"
... />
備選:“非繼承式”配置Application
若您的應用對Application類繼承關係的修改有限制,或想自定義RePlugin載入過程(慎用!),則可以直接呼叫相關方法來使用RePlugin。
public class MainApplication 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();
/* Not need to be called if your application's minSdkVersion > = 14 */
RePlugin.App.onLowMemory();
....
}
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
/* Not need to be called if your application's minSdkVersion > = 14 */
RePlugin.App.onTrimMemory(level);
....
}
@Override
public void onConfigurationChanged(Configuration config) {
super.onConfigurationChanged(config);
/* Not need to be called if your application's minSdkVersion > = 14 */
RePlugin.App.onConfigurationChanged(config);
....
}
}
2外掛接入
第 1 步:新增 RePlugin Plugin Gradle 依賴
在專案根目錄的 build.gradle(注意:不是 app/build.gradle) 中新增 replugin-plugin-gradle 依賴:
buildscript {
dependencies {
classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.2.4'
...
}
}
第 2 步:新增 RePlugin Plugin Library 依賴
在 app/build.gradle 中應用 replugin-plugin-gradle 外掛,並新增 replugin-plugin-lib 依賴:
apply plugin: 'replugin-plugin-gradle'
dependencies {
compile 'com.qihoo360.replugin:replugin-plugin-lib:2.2.4'
...
}