【问题标题】:Android gradle library project: package extra modules and jarsAndroid gradle 库项目:打包额外的模块和jar
【发布时间】:2015-11-15 08:55:14
【问题描述】:

我有一个库项目,我想用我的模块和库创建一个库 jar。 我有 3 个模块:A、B、C。其中 A 是主要模块。

我正在尝试打包所有内容并对其进行混淆。

我试过这个:

task jarRelease(dependsOn: assemble, type: Jar) {
archiveName = normalReleaseJarName
from('build/intermediates/classes/normal/release/')
from(project(':A').projectDir.absolutePath+'/build/intermediates/classes/release/')
from(project(':B').projectDir.absolutePath+'/build/intermediates/classes/release/')
}

但在这种情况下,类没有被混淆。

我也尝试使用 gradle WITH proguard 创建的 classes.jar

ask to export contents as jar
task exportJarRelease(dependsOn: exportSdkDocs, type: Copy) {
from('build/intermediates/bundles/release/')
into('outputFiles/libs')
include('classes.jar')
rename('classes.jar', 'MyJar.jar')
}

但在这种情况下,我找不到里面的 B 或 C 模块,但是这些类被混淆了。

我还可以补充一点,我尝试使用带有 proguard 和 B/C 类路径的“-injars”,但我得到了“重复的类”(这没有意义)并且 B/C 模块不在输出 classes.jar

我向你们所有的 gradle 专家打电话!必须有一个包含所有项目依赖项的打包库 jar 的答案!

谢谢!

你可能想知道的构建 gradle 信息:

 release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'),    'proguard-rules.pro'

    }

dependencies {
compile project(':A')
compile project(':B')
}

【问题讨论】:

    标签: android android-studio gradle android-library android-proguard


    【解决方案1】:

    你好,我有一个答案。 我在寻找答案后学到的东西:

    1. 通过 proguard 的构建类型将通过 proguard 引导所有模块依赖项。没有 proguard 的构建将不会在 build/intermediates/bundles/buildType/classes.jar 中包含额外的模块
    2. 依赖项 jar 仅在启用 proguard 的情况下位于 classes.jar 中,否则它们将作为 jar 文件位于 build/intermeidiates/bundles/buildType/libs/ 中。

    任务

    1. 当 proguard 关闭时,我们想收集所有的 jar 并将它们打包,如下所示:

      task jarDebug(dependsOn: something, type: Jar) {
        archiveName = debugVersionName
        from zipTree('build/intermediates/bundles/debug/classes.jar')
      
        //Adding all Libs
        FileTree tree = fileTree(dir: "build/intermediates/bundles/debug/libs", include: "*.jar");
      
       for(File file : tree.collect()){
         from zipTree(file)
        } 
      }
      
    2. 获取混淆依赖jar:

      1. 将此添加到您的 proguard:

        -outjars build/proguardOutJar/proguard.out.jar\
        -injars ../B/build/intermediates/classes/release/
        -injars ../C/build/intermediates/classes/release/
        
      2. 将它们收集到一个带有任务的罐子中:

         task jarRelease(dependsOn: something, type: Jar) {
          archiveName = normalReleaseJarName
          from zipTree('build/intermediates/bundles/normal/release/classes.jar')
          from zipTree('build/proguardOutJar/proguard.out.jar')
         }
        

    【讨论】:

      猜你喜欢
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 2014-11-23
      • 2012-07-22
      • 2013-02-16
      相关资源
      最近更新 更多