最近学习了两种Android插件开发框架,他们使用了不同的方式来动态加载插件Apk,总体来说 dynamic-plugin-load框架比较实用。而instrument-plugin-load用一定的局限性,该框架声明可以在插件中启动Activity页面,但本人测试看是不行的,插件中启动Activity时出现错误,提示是否在AndroidManifest.xml中声明该activity。现附上楼主的AndroidStudio版结构介绍:
dynamic-plugin-load
该框架能够动态加载插件Apk,并可以实现插件中跳转Activity,前提是插件Apk中的Activity页面要继承DLBasePluginActivity或DLBasePluginFragmentActivity,启动方式需要使用DLIntent,并在宿主app中声明两种代理Activity或者service:
宿主AndroidManifest.xml声明:
<activity android:name="com.penck.dynamic.DLProxyActivity">
<intent-filter>
<action android:name="com.ryg.dynamicload.proxy.activity.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.penck.dynamic.DLProxyFragmentActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="com.ryg.dynamicload.proxy.fragmentactivity.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
插件Activity启动方式:
DLIntent dlIntent = new DLIntent(getPackageName(), SecondActivity.class);
startPluginActivityForResult(dlIntent,0);
instrument-plugin-load
该框架也可以动态加载插件Apk,但在测试时只能启动主Activity,不能在插件中启动另一个Activity,
显示错误是没有在宿主app Manifest.xml中声明activity。使用该框架也需要在宿主AndroidManifest.xml
声明:
宿主AndroidManifest.xml声明:
<activity android:name="com.penck.manager.DynamicActivity" />
plugin-apk和plugin-apk2
两个测试用的插件Apk,在工程主目录运行命令gradlew.bat assembleRelease,就会自动生成apk文件并发到 宿主app的assets/plugin/目录下
library
该module仅仅为了测试宿主app从插件apk中获取信息,并另附两种gradle打jar包的方法:
task makeJar(
type: Copy) {
delete
'build/libs/library.jar'
from(
'build/intermediates/bundles/release/')
into(
'build/libs/')
include(
'classes.jar')
rename(
'classes.jar',
'library.jar')
}
makeJar
.dependsOn(build)
android
.libraryVariants
.all { variant
->
def name
= variant
.buildType
.name
if (name
.equals(com
.android
.builder
.core
.BuilderConstants
.DEBUG)) {
return;
}
def task
= project
.tasks
.create
"jar${name.capitalize()}", Jar
task
.dependsOn variant
.javaCompile
task
.from variant
.javaCompile
.destinationDir
artifacts
.add(
'archives', task);
}
Demo
GitHub
GitHub项目地址链接
转载请注明原文地址: https://ju.6miu.com/read-14338.html