我有一个使用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?
答案 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'