2012-05-11 20 views
8

Bir uygulamanın kodunu gizlemek için Proguard'ı kullanmak istiyorum. Optimizasyonlara ihtiyacım yok ve Proguard'a herhangi bir sınıf veya metodu çıkarmam için ihtiyacım yok. Tek istediğim gizleme. App çeşitli kütüphane projeleri kullanır.Android & Proguard - nasıl kodlanır, ancak herhangi bir kod optimize değil?

Kafamı başımdan vurmaya çalışıyorum ve olmasını istediğim şekilde çalışmıyor. Proguard'ın küçülme seçeneklerini kapattığımı düşünmüş olsam bile, uygulandığında NoSuchMethodExceptions uygulamasının atıldığını görüyorum.

Proguard JUST'ın gizliliğine sahip olmak ve HERHANGİ bir kodu en iyi duruma getirmemek için sihir ayarları nelerdir?

UPDATE. NoSuchMethodExceptions neden olan şaşırtma süreci (optimizasyon veya daralma değil) olduğunu deneme yanılma yoluyla onayladı.

Proguard.cfg

-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 
-dontshrink 
-keep public class * extends Object 
-keep class com.myapp.** { *; } 
-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 com.myapp.activity.Splash 
-keep public class com.myapp.alarm.AlarmsViewer 
-keep public class com.myapp.activity.About 
-keep public class com.myapp.activity.Base 
-keep public class com.myapp.activity.BaseWithMenu 
-keep public class com.myapp.alarm.Alarm 
-keep public class com.myapp.alarm.AlarmFragment 
-keep public class com.myapp.alarm.AlarmPagerAdapter 
-keep public class com.myapp.alarm.AlarmStore 
-keep public class com.myapp.app.App 
-keep public class com.myapp.preferences.Preferences 
-keep public class com.myapp.preferences.PreferencesStore 

-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 * implements android.os.Parcelable { 
    static android.os.Parcelable$Creator CREATOR; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

-keep class android.support.v4.app.** { *; } 
-keep interface android.support.v4.app.** { *; } 
-keep class com.actionbarsherlock.** { *; } 
-keep interface com.actionbarsherlock.** { *; } 

-keepattributes *Annotation* 

-keep public interface com.android.vending.licensing.ILicensingService 

-dontwarn android.support.** 
+0

ile tutulması için gerekli xml dosyaları (işleyicileri tıklayın) başvurulan yöntemleri var optimizasyon adımı sorun mu? – for3st

cevap

6

geri benzer sorunlar bir süre vardı ve kaba kuvvet ve şans ile benim için çözüldü. Benim proguard.cfg benzer ancak ben satırları: Ben bu optimizasyon seçenekleri için fikrim var nerede hatırlayamıyorum

-dontshrink 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

, ama benim için çalışmıyor gibi görünüyor.

tüm

-dontoptimize 

geçiş her zaman yakalamak yoktur (giriş sınıfı dosyalarını optimize etmek verilmediğini belirler Varsayılan olarak, optimizasyon etkindir;.. Tüm yöntemler Bayt kodu düzeyinde optimize edilmiştir)

hangi daha uygun olabilir.

Sonunda bunu nasıl bilebilir, optimizasyon olmadan karartmak için nasıl bilmiyorsanız sadece açıkça

-keepclassmembers class * extends android.app.Activity { 
    public void myClickHandler(android.view.View); 
} 
+4

Herhangi bir XML tıklatma işleyicim yok ve hatta -dontoptimize ve -dontshrink ile bir NoSuchMethodException ile yine de patladı. Şaşırtıcı. Aşırı tasarlanmış mühendis Proguard'ın yığını. –

+0

Üzgünüz, bu sizin için işe yaramıyor. Seninle aynı fikirdeyim - el kitabını takip etmek çok zor. Gerçekten de bir -justobfuscate anahtarı olmalı. Ne yazık ki aplikasyonları ayırmak çok kolay olduğu için maalesef dikkat etmeliyiz. – NickT

+1

Vay. ProGuard kılavuzu> Giriş> Giriş noktaları ... ProGuard kılavuzu> Sorun Giderme> Çalışma zamanı sorunları> NoSuchMethodException. ProGuard kılavuzunu okuyarak –