1. 程式人生 > >Android外掛化——Replugin入門(一)

Android外掛化——Replugin入門(一)

一、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

 外掛,並新增 replugin-host-lib 依賴:

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'
    ...
}

至此外掛和宿主的接入都已經完成,那麼你就可以像單品那樣,開發您的外掛。生成出來的是APK,既可以“安裝到裝置”,又可以“作為外掛”使用。