【发布时间】:2014-02-03 02:52:46
【问题描述】:
我正在使用 android studio 构建调试和发布应用程序。 当我构建调试/发布应用程序时
./gradlew assembleDebug
./gradlew assembleRelease
两个构建都完美地创建并运行。显示适当的调试或发布对话框
现在我在 build.gradle 中添加了 proguard 详细信息:
signingConfigs {
myConfig {
storeFile file("keystore.jks")
storePassword "abc123!"
keyAlias "androidreleasekey"
keyPassword "pqrs123!"
}
}
buildTypes {
release {
runProguard true
proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
signingConfig signingConfigs.myConfig
}
}
productFlavors {
defaultFlavor {
proguardFile 'proguard-rules.txt'
}
}
现在它在事件日志中显示错误
警告:有 7 个未解析的类或接口引用。 您可能需要添加缺少的库 jar 或更新它们的版本。 如果您的代码在没有丢失类的情况下工作正常,您可以抑制 带有“-dontwarn”选项的警告。 (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)
警告:对程序类成员有 2 个未解决的引用。 您的输入类似乎不一致。 您可能需要重新编译代码。
(http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember) :Flash Sales:proguardDefaultFlavorRelease FAILED
如果我将 runProguard 选项设置为 false,则它正在运行。
我有这些问题:
1) 可以用runProguard = false 发布apk 吗?
2) 创建发布版本时如何使用 dontwarn?
【问题讨论】:
-
这是完整的错误日志吗?似乎您遗漏了实际的 7 + 2 个未解决的引用。使用
-dontwarn非常简单,参见例如例如:stackoverflow.com/questions/6974231/… -
关于您的问题 1),对于实际发布版本(到 Google Play 等),建议使用 ProGuard。 (但如果您不关心您的应用程序是否易于逆向工程,则不是强制性的。)我认为绝对值得花一到两个小时来学习使用 ProGuard 并解决您遇到的错误。
-
感谢您的快速回复。现在,当在 proguard-rules.txt 中添加该行时,构建成功创建。现在我还有一个问题,我收到参考警告警告:jcifs.http.NetworkExplorer:找不到超类或接口 javax.servlet.http.HttpServlet 警告:jcifs.http.NtlmHttpFilter:找不到超类或接口 javax .servlet.Filter 当我使用方式 1:-dontwarn javax.servlet.** 或这种方式 2:-dontwarn jcifs.http.** 构建成功创建。那么应该首选哪种方式,这两种方式有什么区别?
-
我想你可以在这个链接stackoverflow.com/questions/35268287/…找到你的答案