如何为 jenkins 构建具有多种风格的应用程序设置 dexguard?

Posted

技术标签:

【中文标题】如何为 jenkins 构建具有多种风格的应用程序设置 dexguard?【英文标题】:How to set up dexguard for jenkins builds on app with multiple flavors? 【发布时间】:2019-11-15 19:18:49 【问题描述】:

我有一个具有多种风格的应用程序,我正在使用 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 ?

【问题讨论】:

【参考方案1】:

dexguard-license1.txt 不会被考虑在内,如果您有额外的许可证文件,请从 dexguard-license2.txt 开始。

【讨论】:

` 找不到 DexGuard 许可证文件。您应该将您的许可证文件 dexguard-license.txt 1) 放在由 Java 系统属性“dexguard.license”定义的位置,2) 放在由操作系统环境变量“DEXGUARD_LICENSE”定义的位置,3) 在您的主目录中, 4) 在类路径中,或 5) 在与 DexGuard jar 相同的目录中(不能与 Gradle v3.1+ 结合使用)。 `@T。内德哈特【参考方案2】:

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

【讨论】:

以上是关于如何为 jenkins 构建具有多种风格的应用程序设置 dexguard?的主要内容,如果未能解决你的问题,请参考以下文章

如何为具有多种语言的词汇列表应用程序制作数据库,例如谷歌翻译?

如何为不同的风格和构建类型设置 applicationid?

具有多个部署的单个 Jenkins 作业

使用多种模板/风格构建单个 Apk

如何为包含空格的 Jenkins 环境变量指定值

如何为启用 2FA 的 github 帐户配置 Jenkins?