如何为 jenkins 设置 dexguard 构建在具有多种口味的应用程序上?

How to set up dexguard for jenkins builds on app with multiple flavors?

我有一个使用 dexguard 的多种风格的应用程序,我决定在 Jenkins 上设置它。 Dexguard 许可证位于 /app/flavor/ eash 许可证,但 Jenkins 总是从最后一个版本中获取许可证。 构建失败,错误代码:

The package name from the AndroidManifest.xml file [com.example.android.flavor1.something] doesn't match the package name [com.example.android.flavor6.something,com.example.android.flavor6.test,com.example.android.flavor6.something.prod,com.example.android.flavor6.test] from your DexGuard license [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?

dexguard-license1.txt不考虑,如果有额外的license文件就从dexguard-license2.txt开始。

已解决: 将此代码添加到每个模块的 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'