如何在具有多种口味的应用程序上为詹金斯建立dexguard?

时间:2019-07-05 07:15:49

标签: android jenkins gradle dexguard

我有一个使用dexguard的具有多种风格的应用程序,因此我决定在Jenkins上进行设置。 Dexguard许可证位于/ app / flavor /中,以获取eash许可证,但Jenkins始终从上一个版本获取许可证。 构建失败,并显示错误代码:

  

AndroidManifest.xml文件[com.example.android.flavor1.something]中的软件包名称与软件包名称[com.example.android.flavor6.something,com.example.android.flavor6.test不匹配,com.example.android.flavor6.something.prod,com.example.android.flavor6.test]从您的DexGuard许可证[C:\ Users \ CurrentUser \ AndroidStudioProjects \ MyApp \ flavor6 \ dexguard-license.txt]

我尝试将dexguard.license重命名为dexguard-licenseX.txt(其中X是调味料的数量),并设置调味料build.gradle来查找该名称,甚至找不到许可证文件。 我也尝试过使用systemProp.dexguard.licence=./flavor1在gradle.properties中设置许可证位置。

我当前正在使用

release {
     System.properties['dexguard.license'] = buildscript.sourceFile.parent
     proguardFiles getDefaultDexGuardFile('dexguard-release.pro'), 'dexguard-rules.pro', 'proguard-rules.pro'
}

这仅在我尝试构建最后一种风味时才有效,否则我必须将dexguard-license复制到主文件夹(这在本地不是问题,但在Jenkins上是个问题)。

是否可以在jenkins上设置dexguard?

2 个答案:

答案 0 :(得分:1)

不会考虑dexguard-license1.txt,如果您还有其他许可证文件,请从dexguard-license2.txt开始。

答案 1 :(得分:0)

解决了它: 将此代码添加到每个模块的build.gradle:

def getCurrentModule() {
Gradle gradle = getGradle()
String  tskReqStr = gradle.getStartParameter().getTaskRequests().toString()

if(tskReqStr.indexOf( ":currentModule:" ) >= 0 )
    return ":currentModule:"
else
  {
    println "NO MATCH FOUND"
    return ""
  }
}

,并且在buildTypes-release中:

if (getCurrentModule() == ":currentModule:") {
            System.properties['dexguard.license'] = buildscript.sourceFile.parent
        }
        proguardFiles getDefaultDexGuardFile('dexguard-release.pro'), 'dexguard-rules.pro', 'proguard-rules.pro'