设置Proguard和导出APK时出错

时间:2013-08-01 05:30:10

标签: android proguard

我正在我的Android项目和导出我的APK文件上进行第一次proguard设置但我得到以下错误: (我在项目根目录中也找不到任何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。

先谢谢。

3 个答案:

答案 0 :(得分:7)

最后,在Tutorial

的帮助下,我得到了答案

我改变了以下事项:

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

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

现在我使用了Google图书馆,因此 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:

  • 右键点击项目
  • 选择导出
  • 按照步骤

如果您有任何查询,那么您可以自由地ping我:)

谢谢。

答案 1 :(得分:3)

在我的案例中使用Maven,google-api-clientguava-jdk5作为依赖项,导致类似的问题。

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

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

答案 2 :(得分:2)

在proguard-project.txt

中添加这些行
-keep public class com.google.common.**
-keep public class * extends android.app.Activity