VirtualAPK icon indicating copy to clipboard operation
VirtualAPK copied to clipboard

请问怎么剔除宿主和插件中相同的依赖

Open qstumn opened this issue 6 years ago • 4 comments

已经按照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剔除

qstumn avatar Jul 17 '18 02:07 qstumn

implementation 换成 api 试试

superqiaopu avatar Aug 03 '18 11:08 superqiaopu

遇到同样的问题

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 avatar Aug 22 '18 01:08 lixi0912

遇到同样的问题

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是否依赖相同的版本,如果相同就剔除掉,但是我无法确认这样做是否有什么后遗症。

ghost avatar Jul 18 '19 07:07 ghost

@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 应该也被剔除

lixi0912 avatar Jul 20 '19 03:07 lixi0912