2011-11-10 15 views
12

Tôi làm cách nào để giải quyết các cảnh báo?Proguard nói với tôi 'Hãy sửa các cảnh báo trên trước.'. Làm cách nào để giải quyết các tham chiếu của các jars bên ngoài?

Log nói

[proguard] Note: duplicate definition of library class... 
... 
[proguard] Note: there were 370 duplicate class definitions. 
[proguard] Initializing... 
[proguard] Warning: abc.cba..: can't find superclass or interface xyz.zyx.... 
... 
[proguard] Note: the configuration refers to the unknown class 'android.app.backup.BackupAgentHelper'... 
... 
[proguard] Warning: library class android.content.IntentFilter depends on program class org.xmlpull.v1.XmlSerializer... 
... 

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 public class !testAppH23.** { *; } 

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

-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 *; 
} 

Đây là Android Ant Build với Proguard Bật console log. Xin vui lòng xem các liên kết ant build console log

Đây là build.xml của tôi (về cơ bản Android gốc kịch bản kiến ​​của nó). Xin vui lòng xem các liên kết TestAppH23 Android Ant Build With Proguard Enabled

local.properties

sdk.dir=C:\\androiddev\\android-sdk-windows 

build.properties

proguard.config=proguard.cfg 
key.store=testapph23-release.keystore 
key.alias=alisname 
key.store.password=storepassword 
key.alias.password=aliaspassword 

default.properties

target=android-7 

Lời xin lỗi của tôi cho bài đăng dài. Bất kỳ hướng dẫn nào về đúng hướng đều được đánh giá cao.

UPDATES1 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="testAppH23.activity" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <application 
     android:icon="@drawable/home" 
     android:theme="@android:style/Theme.NoTitleBar" 
     android:label="@string/app_name" 
     > 
     <activity 
      android:name=".start.StartActivity" 
      android:label="@string/app_name" 
      android:theme="@style/Theme.Translucent" 
      android:screenOrientation="portrait" 
      android:launchMode="singleTask" 
      > 
      <intent-filter> 
       <action 
        android:name="android.intent.action.MAIN" 
        > 
       </action> 
       <category 
        android:name="android.intent.category.LAUNCHER" 
        > 
       </category> 
      </intent-filter> 
     </activity> 
     ..... 
     <service android:name="com.abc.myjar.papi.PIntentService"></service> 

     <service android:name=".service.XyzService"></service> 

    </application> 


    <uses-library android:name="org.apache.http.entity"/> 
    <uses-library android:name="org.apache.http.james.mime4j"/> 

    <uses-permission android:name="android.permission...."/> 

    <uses-sdk android:minSdkVersion="7" /> 

</manifest> 

Trả lời

21

Bạn cần phải trấn an ProGuard rằng một số cấu trúc đáng ngờ trong các lọ đầu vào là ok.

Mã chương trình của bạn chứa bản sao hoặc phiên bản tốt hơn của các lớp thời gian chạy Android trong gói org.xmlpull.v1. Nếu đó là ok:

-dontwarn org.xmlpull.v1.** 
-dontnote org.xmlpull.v1.** 

Mã chương trình của bạn chứa bản sao của lớp thời gian chạy Android trong org.apache.http. Nếu đó là ok:

-dontnote org.apache.http.** 

Mã chương trình của bạn trong các ví dụ gói tham chiếu đến AWT, không tồn tại trong Android. Nếu đó là ok:

-dontwarn java.awt.** 

Trình điều khiển PostgreSQL của bạn đề cập đến nhiều lớp javax không tồn tại trong Android. Nếu đó là ok:

-dontwarn org.postgresql.** 

Và vân vân ...

CFR.ProGuard thủ công>Troubleshooting

Cuối cùng, cấu hình mà bạn chỉ định -keep public class !testAppH23.** { *;}, mà giữ mọi tầng lớp công khai, trừ những người trong testAppH23, và/bảo vệ/thành viên lớp tin công cộng của họ, không bị co lại/tối ưu hóa/obfuscated. Điều này có thể gây ra một số lưu ý (vô hại) về các lớp mô tả. Để nhất quán, bạn có thể muốn loại bỏ "công khai" cho các lớp học, hoặc thêm "công cộng bảo vệ" cho các thành viên lớp.

+1

Trong trường hợp của tôi khi tôi đã thêm lọ Dropbox và lọ Google Drive, nó đã giúp chỉ thêm -dontwarn org.apache. ** và -dontwarn com.google.android.gms. ** (ngoài proguard-google- api-client.txt tự động được thêm vào bởi trình cắm thêm Eclipse của Google). Không cần phải thêm câu lệnh -dontnote. Có lẽ bởi vì tất cả các cảnh báo đã biến mất và không có lý do gì để "lưu ý" về bất kỳ vấn đề nào. Cảm ơn bài đăng của bạn. – petrsyn

Các vấn đề liên quan