插件化框架Replugin使用
关于replugin不做介绍,可以看其他博客。
环境介绍
Android stuido 3.4
gradle 5.1.1
replugin 2.3.3
androidx
插件化项目结构
坑:
Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.localbroadcastmanager.content.LocalBroadcastManager" on path: DexPathList[[zip file "/data/app/com.example.replugindemo-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
... 16 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
解决办法
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
宿主的replugin接入
- 在project 的build.gradle 中
-
classpath 'com.qihoo360.replugin:replugin-host-gradle:2.3.3'
在app 的build.gradle 中(apply plugin: 'replugin-host-gradle'一定要配置在Android{}之后)
apply plugin: 'replugin-host-gradle' /** * 配置项均为可选配置,默认无需添加 * 更多可选配置项参见replugin-host-gradle的RepluginConfig类 * 可更改配置项参见 自动生成RePluginHostConfig.java */ repluginHostConfig { /** * 是否使用 AppCompat 库 * 不需要个性化配置时,无需添加 */ useAppCompat = true /** * 背景不透明的坑的数量 * 不需要个性化配置时,无需添加 */ countNotTranslucentStandard = 6 countNotTranslucentSingleTop = 2 countNotTranslucentSingleTask = 3 countNotTranslucentSingleInstance = 2 }
- 在dependencies 中添加
dependencies { implementation 'com.qihoo360.replugin:replugin-host-lib:2.3.3' .........
完整的build
-
apply plugin: 'com.android.application' android { compileSdkVersion 29 buildToolsVersion "29.0.3" defaultConfig { applicationId "com.example.replugindemo" minSdkVersion 15 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } // apply plugin: 'replugin-host-gradle' /** * 配置项均为可选配置,默认无需添加 * 更多可选配置项参见replugin-host-gradle的RepluginConfig类 * 可更改配置项参见 自动生成RePluginHostConfig.java */ repluginHostConfig { /** * 是否使用 AppCompat 库 * 不需要个性化配置时,无需添加 */ useAppCompat = true /** * 背景不透明的坑的数量 * 不需要个性化配置时,无需添加 */ countNotTranslucentStandard = 6 countNotTranslucentSingleTop = 2 countNotTranslucentSingleTask = 3 countNotTranslucentSingleInstance = 2 } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' implementation 'com.qihoo360.replugin:replugin-host-lib:2.3.3' implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' }
插件的接入
在project 的build.gradle 中
classpath 'com.qihoo360.replugin:replugin-plugin-gradle:2.3.3'
在app 的build.gradle 中
apply plugin: 'replugin-plugin-gradle' repluginPluginConfig { //插件名 pluginName = "ft_login" //宿主app的包名 hostApplicationId = "com.example.replugindemo" //宿主app的启动activity hostAppLauncherActivity = "com.example.replugindemo.MainActivity" }
在dependencies 中添加
implementation 'com.qihoo360.replugin:replugin-plugin-lib:2.3.3'
完整的build
apply plugin: 'com.android.application' android { compileSdkVersion 29 buildToolsVersion "29.0.3" defaultConfig { applicationId "com.example.ft_login" minSdkVersion 15 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } apply plugin: 'replugin-plugin-gradle' repluginPluginConfig { //插件名 pluginName = "ft_login" //宿主app的包名 hostApplicationId = "com.example.replugindemo" //宿主app的启动activity hostAppLauncherActivity = "com.example.replugindemo.MainActivity" } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' implementation 'com.qihoo360.replugin:replugin-plugin-lib:2.3.3' }
接入完毕
插件代码编写注意点
插件要全部继承PluginFragmentActivity
生成插件apk复制在宿主工程的 更改后缀名为.jar
简单测试
宿主启动插件
Intent intent1 = RePlugin.createIntent("ft_login","com.example.ft_login.LoginActivity"); intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//没有会报错 RePlugin.startActivity(this,intent1);
本文地址:https://blog.csdn.net/xueshao110/article/details/108145198
推荐阅读
-
Notepad++中代码格式化插件NppAStyle使用介绍
-
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
-
Sublime Text 2 JS 格式化插件 JsFormat的配置使用
-
Android插件化-RePlugin项目集成与使用详解
-
Android上使用jspf插件框架的方法
-
NetCoreApi框架搭建(一、swagger插件使用)
-
vue.js国际化 vue-i18n插件的使用详解
-
使用vue-i18n插件实现vue语言的切换,国际化。
-
在Bootstrap开发框架的前端视图中使用@RenderPage实现页面内容模块化的隔离,减少复杂度
-
JS 音频可视化插件Wavesurfer.js的使用教程