自从有更新的答案以来已经有一段时间了,所以我想我会更新,因为 DexGuard 的许可证文件设置发生了变化。
我刚刚从 Android Studio 版本从 2.2.3 更新到 2.3,并将我的 Gradle 版本从 2.14.1 升级到 3.3。升级到 Gradle 3.3 版后,我收到了 OP 记录的相同错误:
Can't find a DexGuard license file.
You should place your license file dexguard-license.txt
1) in a location defined by the Java system property 'dexguard.license',
2) in a location defined by the OS environment variable 'DEXGUARD_LICENSE',
3) in your home directory,
4) in the class path, or
5) in the same directory as the DexGuard jar.
我的 DexGuard 配置使用 Gradle 版本 2.14.1 和我的 dexguard-license.txt 文件在与 DexGuard jar 相同的目录中运行良好(建议 #5)。
事实证明,DexGuard 的文档说明了以下内容:
注意:使用 Gradle 3.1+ 时,与 DexGuard 插件 jar 放在同一目录中时,将找不到许可证文件。
(来源:DexGuard 7.3.10 文档 -> 快速入门 -> 设置您的许可证文件)
我想将我的许可证文件保存在与 DexGuard jar 相同的目录中,因此我实施了建议 #1。我通过将以下行添加到项目的 gradle.properties 文件中来做到这一点:
systemProp.dexguard.license=./app/libs/Dexguard_7_3_10
请注意,我的 DexGaurd jar 和我的 dexguard-license.txt 文件位于以下目录中:{project folder}/app/libs/DexGuard_7_3_10/
我选择了这个解决方案,因为我不仅在本地构建,而且还在 Jenkins CI 上构建。该解决方案使我不必对构建服务器本身进行任何更改(即本地环境变量、将文件复制到服务器主目录或类路径选项)。我希望这可以帮助其他偶然发现此问题并发现错误消息令人困惑的人。