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

标签 android eclipse adt proguard android-library

我刚刚将我的 Android SDK、ADT 和 Proguard 升级到最新最好的。

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

enter image description here

如果我尝试通过 Window->Show View->Error Log 查看错误日志,我看到的几乎都是一样的:

enter image description here

我不知道该怎么办,因为 Eclipse 和 Proguard 都不会给出关于问题可能是什么的任何提示

在最近的升级之前,我的项目输出正常。没有构建警告。没有 lint 警告!

我正在使用 ${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。

但令我沮丧的是,下次我再次尝试导出已签名的 APK 时,我收到了同样的Failed to export applicationno console messages! Again!

现在我很清楚 Android 开发工具已经变得不稳定了。每次我想导出已签名的 APK 时,我都无法真正运行 CCleaner 并重新启动 Windows。我不在乎这是谁的错:Android SDK? ADT插件?混淆器?

我现在该怎么办?

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

我尝试使用 Order and Export 选项卡,如 this solution 中所述(还有 this one)但没有帮助。

我现在该怎么办?

最佳答案

您运行的是 Windows XP,所以我不确定我是否可以提供帮助(我运行的是 Windows 7 64 位)但是您对@Boe-Dev 关于“17 个 Unresolved 类引用”的评论提醒了我我最近经历了与您类似的升级:

solved it通过在 proguard.cfg 中放置以下行:

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

不知道你的问题是否和我的一样,但可能值得一试。

编辑:注意到即使关闭 Proguard 也会遇到问题,我可以提出以下建议吗?

  1. 从标准 Java 构建路径中删除库:右键单击项目名称 > 属性 > Java 构建路径 > 选项卡库 > 删除除“Android X.X”和“Android Dependencies”之外的所有内容
  2. 将库文件夹从“lib”重命名为“libs”。这样,Android 插件就会找到“libs”文件夹中的所有库,并将其添加到项目的“Android Dependencies”项中
  3. 清理项目(考虑到 Android 开发工具的不可预测性,这总是必要的)

让我们知道它是如何工作的。

关于android - 升级到 Proguard 4.8 后无法导出应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11037781/

相关文章:

java - 如何使用 Eclipse 中的工具栏按钮打开向导页?

java - Eclipse android项目总是在调试中启动

android - '找不到 Activity 的兼容 AVD 或设备

android - 如何获取 v2 android map 的 map 中心?

android - 如何在android源中默认启用开发者选项?

Android如何检测用户看起来屏幕

Java 构建路径

android - 尝试添加 menu.xml 时 Eclipse 挂起

使用 Eclipse ADT 的 Java

安卓:启动谷歌地图应用程序