【问题标题】:Android Proguard Compatiblity LibraryAndroid Proguard 兼容性库
【发布时间】:2011-11-01 05:50:16
【问题描述】:

您好,我正在编写一个使用兼容性库的应用程序,并且我正在应用程序中使用视图寻呼机。我也在使用从这个链接获得的动作栏库

https://github.com/johannilsson/android-actionbar

我的 proguard.cfg 文件看起来像这样

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

-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.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

#keep all classes that might be used in XML layouts
-keep public class * extends android.view.View
-keep public class * extends android.app.Fragment
-keep public class * extends android.support.v4.Fragment


#keep all public and protected methods that could be used by java reflection
-keepclassmembernames class * {
    public protected <methods>;
}

-keepclasseswithmembernames class * {
    native <methods>;
}

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

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


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

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

-dontwarn **CompatHoneycomb
-dontwarn org.htmlcleaner.*

然后我的 defualt.properties 看起来像这样

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system use,
# "build.properties", and override values to adapt the script to your
# project structure.

# Project target.
target=android-8
android.library.reference.1=../android-actionbar/actionbar
proguard.config=proguard.cfg

但是,当我运行编译并签署我的应用程序时,我得到一个对话框,显示“Proguard 返回错误代码 1。请参阅控制台。”

所以我看看我的控制台,上面写着以下内容

[2011-11-01 01:48:39 - Test App] Proguard returned with error code 1. See console
[2011-11-01 01:48:39 - Test App] proguard.ParseException: Unknown option 'Manager' in argument number 9
[2011-11-01 01:48:39 - Test App]    at proguard.ConfigurationParser.parse(ConfigurationParser.java:170)
[2011-11-01 01:48:39 - Test App]    at proguard.ProGuard.main(ProGuard.java:491)

但这对我来说并没有多大意义,我不知道我应该怎么做才能让它工作?我之前在不使用兼容性库的应用程序上使用过该 proguard 脚本的任何想法,但是,我从那里得到该脚本的地方说它应该与兼容性库一起使用,但不是吗?任何人有任何想法将不胜感激

===编辑===

从我的构建路径中删除空格后,我能够走得更远,但仍然失败并出现错误 1,控制台现在有一个新的错误列表,现在看起来像这样。

[2011-11-01 14:01:20 - TestApp] Proguard returned with error code 1. See console
[2011-11-01 14:01:20 - TestApp] Warning: android.support.v4.os.ParcelableCompatCreatorHoneycombMR2: can't find superclass or interface android.os.Parcelable$ClassLoaderCreator
[2011-11-01 14:01:20 - TestApp] Warning: android.support.v4.os.ParcelableCompatCreatorHoneycombMR2: can't find referenced class android.os.Parcelable$ClassLoaderCreator
[2011-11-01 14:01:20 - TestApp] Warning: android.support.v4.os.ParcelableCompatCreatorHoneycombMR2: can't find referenced class android.os.Parcelable$ClassLoaderCreator
[2011-11-01 14:01:20 - TestApp] Warning: there were 3 unresolved references to classes or interfaces.
[2011-11-01 14:01:20 - TestApp]          You may need to specify additional library jars (using '-libraryjars'),
[2011-11-01 14:01:20 - TestApp]          or perhaps the '-dontskipnonpubliclibraryclasses' option.
[2011-11-01 14:01:20 - TestApp] java.io.IOException: Please correct the above warnings first.
[2011-11-01 14:01:20 - TestApp]     at proguard.Initializer.execute(Initializer.java:308)
[2011-11-01 14:01:20 - TestApp]     at proguard.ProGuard.initialize(ProGuard.java:210)
[2011-11-01 14:01:20 - TestApp]     at proguard.ProGuard.execute(ProGuard.java:85)
[2011-11-01 14:01:20 - TestApp]     at proguard.ProGuard.main(ProGuard.java:499)

【问题讨论】:

    标签: java android eclipse proguard


    【解决方案1】:

    我猜您的项目路径包含空格(在本例中是“Manager”一词)。用于 Eclipse (ADT R14) 的最新 Android 插件在将包含空格的路径传递给 ProGuard 时仍然存在问题。替代解决方法:

    • 使用基于 Ant 的命令行构建。问题应该在那里解决。
    • 安装 ProGuard 4.7 beta2(或更高版本)。对于包含空格的文件名周围缺少引号更为宽松。你可以 download 发布版本并将 jar 从 proguard/lib 复制到 android-sdk/tools/proguard/lib。
    • 使用不带空格的项目路径。

    【讨论】:

    • 请查看我的编辑,我按照您的建议从项目路径中删除了空格,这次能够走得更远,但是仍然失败,错误代码 1 向我的控制台打印了一些新消息,我已经用上面编辑了我的问题。感谢你们到目前为止的帮助
    • 我还按照您的建议安装了 4.7 beta2,得到了同样的错误并在控制台中打印出来,就像我上面的编辑一样
    • 第二个错误是由 Android 兼容性库引用了仅存在于最新版本的 Android API 中的类引起的。在这种情况下,没关系,您可以通过添加“-dontwarn android.support.**”让 ProGuard 接受它。
    • 非常感谢能够编译它,现在已得到保护,再次感谢您的帮助
    • @EricLafortune 非常感谢 -dontwarn android.support.** 行。如果您也可以将其包含在答案中,那就太棒了!
    【解决方案2】:

    这可能是几件事情,但是当我遇到这个问题时我所做的是:

    • 为 Eclipse 更新 ADT 插件
    • 在 android-sdk/tools/proguard 中安装最新版本的 ProGuard
    • 在 Eclipse 中创建一个新项目并将所有类和资源复制到新项目中
    • 在新项目中配置proguard
    • 导出!

    我不知道以前的项目没有用,但我知道那个技巧对我有用。希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 2011-03-22
      • 1970-01-01
      相关资源
      最近更新 更多