Shadow
Shadow copied to clipboard
如果将一个组件module的so库和jar提取到一个新的moudle中,做成插件moudle是否可以实现呢?
宿主moudle如何获取到插件的so库,并且自动导包到插件jar里面的类?
在Shadow框架下插件是依赖宿主的,所以宿主对插件的依赖都要通过控制反转设计。
可以参考sample-host-lib
中类的使用。
老师有没有具体的demo?如果反转设计,宿主依赖的library的build.gradle如何配置呢 需要把插件的如下配置都放到宿主里面吗? //注意sample-host-lib要用compileOnly编译而不打包在插件中。在packagePlugin任务中配置hostWhiteList允许插件访问宿主的类。 pluginCompileOnly project(":sample-host-lib") normalImplementation project(":sample-host-lib")
shadow { transform { // useHostContext = ['abc'] }
packagePlugin {
pluginTypes {
debug {
loaderApkConfig = new Tuple2('sample-loader-debug.apk', ':sample-loader:assembleDebug')
runtimeApkConfig = new Tuple2('sample-runtime-debug.apk', ':sample-runtime:assembleDebug')
pluginApks {
pluginApk1 {
businessName = 'sample-plugin-app'
partKey = 'sample-plugin-app'
buildTask = ':sample-app:assemblePluginDebug'
apkPath = 'projects/sample/source/sample-plugin/sample-app/build/outputs/apk/plugin/debug/sample-app-plugin-debug.apk'
hostWhiteList = ["com.tencent.shadow.sample.host.lib"]
dependsOn = ['sample-base']
}
pluginApk2 {
businessName = 'sample-plugin-app2'
partKey = 'sample-plugin-app2'
buildTask = ':sample-app:assemblePluginDebug'
apkPath = 'projects/sample/source/sample-plugin/sample-app/build/outputs/apk/plugin/debug/sample-app-plugin-debug2.apk'
hostWhiteList = ["com.tencent.shadow.sample.host.lib"]
dependsOn = ['sample-base']
}
sampleBase {
businessName = 'sample-plugin-app'
partKey = 'sample-base'
buildTask = ':sample-base:assemblePluginDebug'
apkPath = 'projects/sample/source/sample-plugin/sample-base/build/outputs/apk/plugin/debug/sample-base-plugin-debug.apk'
hostWhiteList = ["com.tencent.shadow.sample.host.lib"]
}
}
}
release {
loaderApkConfig = new Tuple2('sample-loader-release.apk', ':sample-loader:assembleRelease')
runtimeApkConfig = new Tuple2('sample-runtime-release.apk', ':sample-runtime:assembleRelease')
pluginApks {
pluginApk1 {
businessName = 'sample-plugin-app'
partKey = 'sample-plugin-app'
buildTask = ':sample-app:assemblePluginRelease'
apkPath = 'projects/sample/source/sample-plugin/sample-app/build/outputs/apk/plugin/release/sample-app-plugin-release.apk'
hostWhiteList = ["com.tencent.shadow.sample.host.lib"]
dependsOn = ['sample-base']
}
pluginApk2 {
businessName = 'sample-plugin-app2'
partKey = 'sample-plugin-app2'
buildTask = ':sample-app:assemblePluginRelease'
apkPath = 'projects/sample/source/sample-plugin/sample-app/build/outputs/apk/plugin/release/sample-app-plugin-release2.apk'
hostWhiteList = ["com.tencent.shadow.sample.host.lib"]
dependsOn = ['sample-base']
}
sampleBase {
businessName = 'sample-plugin-app'
partKey = 'sample-base'
buildTask = ':sample-base:assemblePluginRelease'
apkPath = 'projects/sample/source/sample-plugin/sample-base/build/outputs/apk/plugin/release/sample-base-plugin-release.apk'
hostWhiteList = ["com.tencent.shadow.sample.host.lib"]
}
}
}
}
loaderApkProjectPath = 'projects/sample/source/sample-plugin/sample-loader'
runtimeApkProjectPath = 'projects/sample/source/sample-plugin/sample-runtime'
archiveSuffix = System.getenv("PluginSuffix") ?: ""
archivePrefix = 'plugin'
destinationDir = "${getRootProject().getBuildDir()}"
version = 4
compactVersion = [1, 2, 3]
uuidNickName = "1.1.5"
}
}
sample-host-lib就是具体的例子了。你可以全文搜索其中的类名包名。
老师我看了sample-host-lib中的类,demo中是实现了插件调用宿主的类,我现在的需求是宿主调用插件中的类,我想问下你说的反转设计,我需要做哪些配置呢?
你可以自行搜索一下“依赖注入和控制反转”,这是一种基本的设计模式。
sample-host-lib就是具体的例子了。你可以全文搜索其中的类名包名。
老师你好,请问sample-host-lib中的这个插件是必须要配置的么 apply plugin: 'com.tencent.shadow.internal.aar-to-jar'