7

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

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

在此处输入图像描述

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

在此处输入图像描述

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

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

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

-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 application的消息,但没有控制台消息!再次!

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

现在我该怎么做?

再进步一点?我尝试在关闭 Proguard 的情况下导出签名的 APK。它导出正常,但是当我启动它时,它会因为找不到应用程序的活动类 ( ClassNotFoundException) 而立即崩溃。这很奇怪!它在调试模式下运行良好,如果应用程序的活动类不存在,它不应该编译!这是怎么回事?最新最好的 Android 开发工具是否损坏?

我尝试按照此解决方案(以及Order and Export解决方案)中的描述使用选项卡,但没有帮助。

现在我该怎么做?

4

4 回答 4

9

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

我通过将以下行放入解决了这个问题proguard.cfg

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

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

编辑:注意到即使你关闭 Proguard 你也有问题,我可以建议以下吗?

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

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

于 2012-06-14T20:13:50.820 回答
2

你的错误日志怎么样。窗口->显示视图->错误日志。与控制台输出不同,错误代码 1 往往会出现在此处。

于 2012-06-14T18:58:24.247 回答
1

尝试在 Eclipse 中重新安装您的 ADT 插件

于 2012-06-14T16:52:33.847 回答
0

这是对我有用的关键

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

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

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

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

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

于 2012-08-20T02:42:31.000 回答