gpt4 book ai didi

android - 为什么在我以前不需要时开始使用 -libraryjars?

转载 作者:可可西里 更新时间:2023-11-01 19:05:26 25 4
gpt4 key购买 nike

自从我将 ADT 从 16 更新到 18(这要求 Proguard 从 4.6 更新到 4.8),Proguard 一直表现得很奇怪(而且不一致?)。

最新的此类问题是当我尝试导出已签名(发布)的 APK 时,我收到以下错误:

Proguard returned with error code 1. See console
Warning: com.bta.LibProj2: can't find referenced class com.bta.R$string
Warning: com.bta.MyDlg1: can't find referenced class com.bta.R$string
Warning: com.bta.MyMenu: can't find referenced class com.bta.R$menu
Warning: com.bta.R: can't find referenced class com.bta.R$attr
Warning: com.bta.R: can't find referenced class com.bta.R$drawable
Warning: com.bta.R: can't find referenced class com.bta.R$menu
Warning: com.bta.R: can't find referenced class com.bta.R$string
Warning: com.bta.myapp.MyAppActivity$1: can't find referenced class com.bta.myapp.MyAppActivity
Warning: com.bta.myapp.MyAppActivity$ELicenseResponse: can't find referenced class com.bta.myapp.MyAppActivity
Warning: com.bta.myapp.MyAppActivity$MyLicenseCheckerCallback$1: can't find referenced class com.bta.myapp.MyAppActivity$MyLicenseCheckerCallback
Warning: com.bta.myapp.MyAppActivity$MyLicenseCheckerCallback$1: can't find referenced class com.bta.myapp.MyAppActivity
Warning: com.bta.myapp.R$array: can't find referenced class com.bta.myapp.R
Warning: com.bta.myapp.R$layout: can't find referenced class com.bta.myapp.R
Warning: com.bta.myapp.R$xml: can't find referenced class com.bta.myapp.R
Warning: there were 49 unresolved references to classes or interfaces.
You may need to specify additional library jars (using '-libraryjars').
java.io.IOException: Please correct the above warnings first.
at proguard.Initializer.execute(Initializer.java:321)
at proguard.ProGuard.initialize(ProGuard.java:212)
at proguard.ProGuard.execute(ProGuard.java:87)
at proguard.ProGuard.main(ProGuard.java:493)

我确实注意到了在 proguard.cfg 中添加 -libraryjars 的建议,但我以前从来不需要这样做(而且我没有更改我的代码中的任何内容,我所做的只是更新 Proguard从 4.6 到 4.8)。这是否表明我的开发环境配置有问题?

此外,我还查看了 Proguard 的故障排除部分中的 Can't find referenced class : 它指的是忘记或忽略通过 -libraryjars 指定一个库(我承认),但我从未指定任何库并且它总是以前有效!发生了什么变化?

顺便说一下,我的 proguard.cfg 文件开头是:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

知道发生了什么事吗?为什么 Proguard 开始给我带来如此困难? (我已经用了一年多了,非常顺利)我的系统配置中是否缺少一些基本的东西?

顺便说一句,我确实尝试通过在 -libraryjars 行中指定所有库来添加我一直在使用的库,但是 Proguard 的行为只会变得更糟:它会在不提供任何错误日志的情况下失败我在上面引用过。

最佳答案

问题解决了。 在 SO 中寻找线索后,我终于找到了 this hint除了 Proguard 的开发者本人:

-dontwarn scala.**

我没有使用任何包含“scala”的东西,我也不知道 scala 是什么。但这让我想到了在我自己的应用程序包上放置一个-dontwarn:

-dontwarn com.bta.**

成功了。

根据记录,导致我找到此提示的搜索短语是:proguard admob "can't find referenced class" .

附言Proguard 的建议 You may need to specify additional library jars (using '-libraryjars') 甚至不是正确的方向......

更新:虽然 -dontwarn com.bta.** 允许生成签名的 APK,但当我尝试使用以下命令启动它时它立即崩溃了:

ClassNotFoundException: com.bta.myapp.MyAppActivity in loader dalvik.system.PathClassLoader[/data/app/com.bta.myapp.myapp-1.apk]. 

什么样的恶梦。

更新 2: -dontwarn com.bta.** 结果太包容了。我改成了:

-dontwarn com.bta.myapp.MyAppActivity.R**

现在一切顺利,没有发生任何事故。真是一场噩梦。

在调试本应节省我时间的工具上浪费了太多时间之后,我发现了问题的根源。 <强> It's a bug in the Android SDK tools 。它被记录为已在 r17 中解决,但我使用的是今天(2012 年 6 月 18 日)的最新版本,它尚未解决!(请参阅评论 24)。 Comment 25还描述了允许我现在继续我的实际开发的解决方法。

错误是复杂系统中不可或缺的事实。但事实上,无论是 Proguard 还是向 Proguard 提供输入的构建工具都无法提供任何有用的错误消息(事实上,它们所做的恰恰相反)表明 Android 开发工具的“方法论”存在问题 recommended by Google .

关于android - 为什么在我以前不需要时开始使用 -libraryjars?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11006305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com