【问题标题】:Error while Setting of Proguard and Exporting APK设置 Proguard 和导出 APK 时出错
【发布时间】:2013-08-01 05:30:09
【问题描述】:

我正在对我的 Android 项目进行首次 Proguard 设置并导出我的 APK 文件,但出现以下错误: (我也没有在我的项目根目录中找到任何proguard.cfg 文件)

[2013-08-01 10:54:42 - SalesmanTracker] Note: there were 2 duplicate class definitions.
[2013-08-01 10:54:42 - SalesmanTracker] Warning: com.google.common.collect.MinMaxPriorityQueue: can't find referenced field 'int UNSET_EXPECTED_SIZE' in class com.google.common.collect.MinMaxPriorityQueue$Builder
[2013-08-01 10:54:42 - SalesmanTracker] Warning: com.google.common.primitives.UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator: can't find referenced class sun.misc.Unsafe
[2013-08-01 10:54:42 - SalesmanTracker] Warning: com.google.common.primitives.UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator: can't find referenced class sun.misc.Unsafe
[2013-08-01 10:54:42 - SalesmanTracker] Warning: com.google.common.primitives.UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator: can't find referenced class sun.misc.Unsafe
[2013-08-01 10:54:42 - SalesmanTracker] Warning: com.google.common.primitives.UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator: can't find referenced class sun.misc.Unsafe
[2013-08-01 10:54:42 - SalesmanTracker] Warning: com.google.common.primitives.UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator: can't find referenced class sun.misc.Unsafe
[2013-08-01 10:54:42 - SalesmanTracker] Warning: com.google.common.primitives.UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator$1: can't find referenced class sun.misc.Unsafe
[2013-08-01 10:54:42 - SalesmanTracker] Warning: com.salesman.activities.PlacesMapActivity: can't find referenced class com.google.android.maps.GeoPoint
[2013-08-01 10:54:42 - SalesmanTracker] Warning: com.salesman.activities.PlacesMapActivity: can't find referenced class com.google.android.maps.MapController
[2013-08-01 10:54:42 - SalesmanTracker] Warning: com.salesman.activities.PlacesMapActivity: can't find referenced class com.google.android.maps.OverlayItem
[2013-08-01 10:54:42 - SalesmanTracker]       You should check if you need to specify additional program jars.
[2013-08-01 10:54:42 - SalesmanTracker] Warning: there were 9 unresolved references to classes or interfaces.
[2013-08-01 10:54:42 - SalesmanTracker]          You may need to specify additional library jars (using '-libraryjars').
[2013-08-01 10:54:42 - SalesmanTracker] Warning: there were 1 unresolved references to program class members.
[2013-08-01 10:54:42 - SalesmanTracker]          Your input classes appear to be inconsistent.
[2013-08-01 10:54:42 - SalesmanTracker]          You may need to recompile them and try again.
[2013-08-01 10:54:42 - SalesmanTracker]          Alternatively, you may have to specify the option 
[2013-08-01 10:54:42 - SalesmanTracker]          '-dontskipnonpubliclibraryclassmembers'.
[2013-08-01 10:54:42 - SalesmanTracker] java.io.IOException: Please correct the above warnings first.
[2013-08-01 10:54:42 - SalesmanTracker]     at proguard.Initializer.execute(Initializer.java:321)
[2013-08-01 10:54:42 - SalesmanTracker]     at proguard.ProGuard.initialize(ProGuard.java:211)
[2013-08-01 10:54:42 - SalesmanTracker]     at proguard.ProGuard.execute(ProGuard.java:86)
[2013-08-01 10:54:42 - SalesmanTracker]     at proguard.ProGuard.main(ProGuard.java:492)

**project.properties : **

# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=proguard.cfg

# Project target.
target=android-17
android.library.reference.1=..\\librarySlideMenu
android.library.reference.2=../google-play-services_lib

请告诉我解决方案以及如何正确设置proguard。

提前致谢。

【问题讨论】:

    标签: android proguard


    【解决方案1】:

    在Tutorial的帮助下我终于得到了答案

    我更改了以下内容:

    在 project.properties: 取消注释或添加此行:

    proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
    

    现在我使用了 Google Library,所以我的 proguard.project.txt 会是这样的:

    在此处添加您在项目中使用的库:

    -libraryjars /libs/google-api-client-1.10.3-beta.jar
    -libraryjars /libs/google-api-client-android2-1.10.3-beta.jar
    -libraryjars /libs/google-http-client-1.10.3-beta.jar
    -libraryjars /libs/google-http-client-android2-1.10.3-beta.jar
    -libraryjars /libs/google-oauth-client-1.10.1-beta.jar
    -libraryjars /libs/gson-2.1.jar
    -libraryjars /libs/guava-11.0.1.jar
    -libraryjars /libs/jackson-core-asl-1.9.4.jar
    -libraryjars /libs/jsr305-1.3.9.jar
    -libraryjars /libs/protobuf-java-2.2.0.jar
    -libraryjars /libs/maps.jar
    

    在此处添加任何项目特定的保留选项:

    -keep class com.google.**
    -dontwarn com.google.**
    

    然后您可以使用以下步骤导出您的 APK:

    • 右键单击项目
    • 选择导出
    • 按步骤操作

    如果您有任何疑问,请随时联系我 :)

    谢谢。

    【讨论】:

    • 它给了我 IOException: 相同的输入 jar [.\libs\jsr305-3.0.1.jar] 被指定了两次。
    【解决方案2】:

    在我的情况下使用 Maven,google-api-client 带来了 guava-jdk5 作为依赖项,导致类似的问题。

    Proguard 上的 Guava wiki 页面建议: https://code.google.com/p/guava-libraries/wiki/UsingProGuardWithGuava

    -dontwarn sun.misc.Unsafe
    -dontwarn com.google.common.collect.MinMaxPriorityQueue
    

    【讨论】:

    • 我发现在使用番石榴时将以下内容添加到 progaurd-rules.pro 对我有用:-dontwarn sun.misc.Unsafe -dontwarn com.google.common.**
    • 您实际上已经从 com.google.common 包中排除了更多类,仅此而已,最终结果应该几乎相同,因为除了 MinMaxPriorityQueue 之外的所有类都不会产生警告,所以.. .
    【解决方案3】:

    在你的 proguard-project.txt 中添加这些行

    -keep public class com.google.common.**
    -keep public class * extends android.app.Activity
    

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多