VirtualAPK
VirtualAPK copied to clipboard
请问怎么剔除宿主和插件中相同的依赖
已经按照wiki的插件开发指南,把宿主和插件中公用的部分抽出来发布到本地的maven私服 然后在宿主和插件中都依赖了相同的版本,但是在gradlew clean assemblePlugin后,插件的apk中依然有这部分代码,并没有剔除掉 使用gradle tools版本 3.0.1、2.3.2
宿主的build.gradle
apply plugin: 'com.didi.virtualapk.host'
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'cn.monph.app:public-resource:0.0.2'
implementation 'com.didi.virtualapk:core:0.9.6'
}
插件的build.gradle
apply plugin: 'com.didi.virtualapk.plugin'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'cn.monph.app:public-resource:0.0.2'
}
virtualApk {
packageId = 0x6f // The package id of Resources.
targetHost = '../app' // The path of application module in host project.
applyHostMapping = true // [Optional] Default value is true.
}
gradlew clean assemblePlugin后,控制台里提示:
please declare it in application project build.gradle:
virtualApk {
forceUseHostDependences = true
}
不知道这个是什么意思,即使把forceUseHostDependences = true 加到插件的virtualApk中,build出来的插件APK中依然没有把'cn.monph.app:public-resource:0.0.2'这个公共aar剔除
implementation 换成 api 试试
遇到同样的问题
core: 0.9.7-dev
gradle version: 4.4
android gradle plugin version: 3.1.0
VirtualAPK plugin version: 0.9.8.5-dev
device: mac 10.13.2
构建命令: ./gradlew :lib:clean :lib:assemblePlugin
app dependencies{
implementation "com.android.support:appcompat-v7:27.1.1"
}
lib dependencies{
implementation "com.android.support:appcompat-v7:27.1.1"
}
相同代码在以下版本正常
core: 0.9.1
gradle version: 4.1
android gradle plugin version: 3.0.1
VirtualAPK plugin version: 0.9.7-dev
UPDATE
在 天烈
大佬的帮助下
去掉了 assemblePlugin
的构建域,并调整了版本,解决了我这边的问题
./gradlew :lib:clean assemblePlugin
core: 0.9.7-dev
gradle version: 4.6
android gradle plugin version: 3.0.1
VirtualAPK plugin version: 0.9.8.5-dev
遇到同样的问题
core: 0.9.7-dev gradle version: 4.4 android gradle plugin version: 3.1.0 VirtualAPK plugin version: 0.9.8.5-dev device: mac 10.13.2 构建命令: ./gradlew :lib:clean :lib:assemblePlugin app dependencies{ implementation "com.android.support:appcompat-v7:27.1.1" } lib dependencies{ implementation "com.android.support:appcompat-v7:27.1.1" }
相同代码在以下版本正常
core: 0.9.1 gradle version: 4.1 android gradle plugin version: 3.0.1 VirtualAPK plugin version: 0.9.7-dev
UPDATE
在
天烈
大佬的帮助下 去掉了assemblePlugin
的构建域,并调整了版本,解决了我这边的问题./gradlew :lib:clean assemblePlugin core: 0.9.7-dev gradle version: 4.6 android gradle plugin version: 3.0.1 VirtualAPK plugin version: 0.9.8.5-dev
@lixi0912 请教一下你这边是通过什么方式解决的吗,我想到一种方式,通过dependencies的"${t.group}:${t.artifact}:${t.version}"
来比较,即,将:
if (!stripEntries.containsAll(jarEntries)) {
换成
if (!vaContext.stripDependencies.stream().anyMatch(new Predicate<DependenceInfo>() {
@Override
boolean test(DependenceInfo t) {
def name = "${t.group}:${t.artifact}:${t.version}"
Log.i 'StripClassAndResTransform',"dependencies name = $name"
return name == jarInput.name
}
})) {
来比较和host是否依赖相同的版本,如果相同就剔除掉,但是我无法确认这样做是否有什么后遗症。
@lixi0912 请教一下你这边是通过什么方式解决的吗,我想到一种方式,通过dependencies的
"${t.group}:${t.artifact}:${t.version}"
来比较,即,将:if (!stripEntries.containsAll(jarEntries)) {
换成
if (!vaContext.stripDependencies.stream().anyMatch(new Predicate<DependenceInfo>() { @Override boolean test(DependenceInfo t) { def name = "${t.group}:${t.artifact}:${t.version}" Log.i 'StripClassAndResTransform',"dependencies name = $name" return name == jarInput.name } })) {
来比较和host是否依赖相同的版本,如果相同就剔除掉,但是我无法确认这样做是否有什么后遗症。
你是怎么构建的呢?
比较版本的话,只要比较 group``artifact
就好了,比如 support 27.0.0 lib 28.0.0 应该也被剔除