升级到Proguard 4.8后无法导出应用程序

时间:2012-06-14 16:50:19

标签: android eclipse adt proguard android-library

我刚刚将Android SDK,ADT和Proguard升级到最新版本。

我的项目编译构建并在调试模式下运行良好,但是一旦我尝试导出它的签名版本APK,我就会从导出向导收到错误,而Eclipse控制台上没有任何错误日志消息! *

enter image description here

如果我尝试通过Window->Show View->Error Log查看错误日志,我看到的更多相同:

enter image description here

我不知道该怎么办,因为Eclipse和Proguard都没有给出任何提示关于问题的原因。

我的项目在最近的升级之前导出正常。没有构建警告。没有棉绒警告!

我在${sdk.dir}\tools\proguard\proguard-android.txt中使用Android的标准配置文件:

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose

-dontoptimize
-dontpreverify

-keepattributes *Annotation*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgent
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

-dontwarn android.support.**

我的项目的proguard.cfg只包含:

-assumenosideeffects class android.util.Log {
    public static *** v(...);
    public static *** i(...);
    public static *** d(...);
    public static *** w(...);
    public static *** e(...);
}

之前有人见过这个问题吗? 知道如何解决这个问题吗?

取得了一些进展?自从我升级以来,我第一次能够导出已签名的APK:

  1. 我运行CCleaner清理Windows系统中的所有临时文件和缓存
  2. 然后我重新启动了Windows。
  3. 但令我沮丧的是,下次我尝试再次导出已签名的APK时,我收到了同样的Failed to export application 没有控制台消息!再次!

    现在我很清楚Android开发工具已变得不稳定。每次我想导出已签名的APK时,我都无法运行CCleaner并重新启动Windows。而我不关心它的错:Android SDK? ADT插件? Proguard的?

    我现在该怎么办?

    还有更多进展吗?我尝试导出已关闭Proguard的签名APK。它导出确定但是当我启动它时,它立即崩溃,因为无法找到应用程序的活动类(ClassNotFoundException)。这很奇怪!它在调试模式下运行良好,如果应用程序的活动类不在那里,它应该没有编译!这是怎么回事?是最新的&amp;最好的Android开发工具坏了?

    我尝试使用this solution(以及this one)中所述的Order and Export标签进行播放,但它没有帮助。

    我现在该怎么办?

4 个答案:

答案 0 :(得分:9)

你正在运行Windows XP,所以我不确定我能提供帮助(我正在运行Windows 7 64位),但你对@ Boe-Dev关于“17个未解决的类引用”的评论提醒了我我最近的一次考验与你的升级相似:

solved it将以下行放在proguard.cfg中:

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

不知道你的问题是否与我的问题相同,但值得一试。

编辑:注意即使您关闭Proguard时遇到问题,我还可以建议以下内容吗?

  1. 从标准Ja​​va构建路径中删除库:右键单击项目名称&gt;属性&gt; Java构建路径&gt;选项卡库&gt;删除除“Android X.X”和“Android Dependencies”之外的所有内容
  2. 将库文件夹从“lib”重命名为“libs”。通过这样做,Android插件找到文件夹“libs”中的所有库,并将其添加到项目的“Android Dependencies”项目中
  3. 清理项目(考虑到Android开发工具的不可预测性,总是必要的)
  4. 让我们知道它是如何运作的。

答案 1 :(得分:2)

您的错误日志如何?窗口 - &gt;显示视图 - &gt;错误日志。与控制台输出分开,错误代码1往往会显示在此处。

答案 2 :(得分:1)

尝试在eclipse中重新安装ADT插件

答案 3 :(得分:0)

这是对我有用的钥匙

http://android.foxykeep.com/dev/fix-the-conversion-to-dalvik-format-failed-with-error-1-with-adt-14

据说已在ADT-15中修复,解决方法是

1)对于每个X_src元素,右键单击它,然后构建路径&gt;从构建路径中删除。

2)弹出窗口将打开。确保选中“同时取消文件夹与项目的链接”,然后接受它。

您仍然可以调试库代码,但需要在这些项目中管理断点,然后逐步执行类文件选项卡中的代码。