2014-06-20 32 views
6

ile hata döndürdü Uygulamamıza Google Play Hizmetleri kitaplığı ekledim. Her şey iyi çalışıyor ama benim apkmın büyüklüğü 350KB'den 1.6MB'a 4 (!) Kez yükseliyor. Kullanılmayan sınıfları Google Play Hizmetleri kütüphanesinden kaldırmak için ProGuard'ı kullanmaya karar verdim. Ama şimdi ProGuard hata döndürdüğü için projeyi çalıştıramıyorum veya bunu apk'ye veremiyorum. GPS lib'u kullanmadığım zaman ihracatla ilgili bir sorunum yok ama bu kütüphaneyle birlikte apk oluşturamıyorum. Bu sorun hakkında çok şey okuyorum ama bulduğum herhangi bir çözüm bana yardımcı olmadı. İşte Proguard, Google Play Hizmetleri kütüphanesi

benim ( here önerilen gibi) proguard-project.txt İşte
-keep class * extends java.util.ListResourceBundle { 
    protected Object[][] getContents(); 
} 

-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { 
    public static final *** NULL; 
} 

-keepnames @com.google.android.gms.common.annotation.KeepName class * 
-keepclassmembernames class * { 
    @com.google.android.gms.common.annotation.KeepName *; 
} 

-keepnames class * implements android.os.Parcelable { 
    public static final ** CREATOR; 
} 

benim proguard.cng

-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.* 
-dontwarn com.google.android.gms.** 
-keep class com.google.android.gms.common.GooglePlayServicesUtil {*;} 
-keep class com.google.ads.** { *;} 

ve burada ihracat sonrasında elde edilen bir hatadır apk için:

[2014-06-20 23:11:38 - Dictionary] Proguard returned with error code 1. See console 
[2014-06-20 23:11:38 - Dictionary]  You should check if you need to specify additional program jars. 
[2014-06-20 23:11:38 - Dictionary] Unexpected error while performing partial evaluation: 
[2014-06-20 23:11:38 - Dictionary] Class  = [com/google/android/gms/common/GooglePlayServicesUtil] 
[2014-06-20 23:11:38 - Dictionary] Method  = [showErrorDialogFragment(ILandroid/app/Activity;ILandroid/content/DialogInterface$OnCancelListener;)Z] 
[2014-06-20 23:11:38 - Dictionary] Exception = [java.lang.IllegalArgumentException] (Can't find any super classes of [com/google/android/gms/common/SupportErrorDialogFragment] (not even immediate super class [android/support/v4/app/DialogFragment])) 
[2014-06-20 23:11:38 - Dictionary] java.lang.IllegalArgumentException: Can't find any super classes of [com/google/android/gms/common/SupportErrorDialogFragment] (not even immediate super class [android/support/v4/app/DialogFragment]) 
[2014-06-20 23:11:38 - Dictionary] at proguard.evaluation.value.ReferenceValue.generalize(ReferenceValue.java:299) 
[2014-06-20 23:11:38 - Dictionary] at proguard.evaluation.value.IdentifiedReferenceValue.generalize(IdentifiedReferenceValue.java:65) 
[2014-06-20 23:11:38 - Dictionary] at proguard.evaluation.value.ReferenceValue.generalize(ReferenceValue.java:481) 
[2014-06-20 23:11:38 - Dictionary] at proguard.evaluation.Variables.generalize(Variables.java:136) 
[2014-06-20 23:11:38 - Dictionary] at proguard.evaluation.TracedVariables.generalize(TracedVariables.java:118) 
[2014-06-20 23:11:38 - Dictionary] at proguard.optimize.evaluation.PartialEvaluator.evaluateSingleInstructionBlock(PartialEvaluator.java:682) 
[2014-06-20 23:11:38 - Dictionary] at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlock(PartialEvaluator.java:602) 
[2014-06-20 23:11:38 - Dictionary] at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlockAndExceptionHandlers(PartialEvaluator.java:560) 
[2014-06-20 23:11:38 - Dictionary] at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute0(PartialEvaluator.java:264) 
[2014-06-20 23:11:38 - Dictionary] at proguard.optimize.evaluation.PartialEvaluator.visitCodeAttribute(PartialEvaluator.java:181) 
[2014-06-20 23:11:38 - Dictionary] at proguard.classfile.attribute.CodeAttribute.accept(CodeAttribute.java:101) 
[2014-06-20 23:11:38 - Dictionary] at proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:79) 
[2014-06-20 23:11:38 - Dictionary] at proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMember(AllAttributeVisitor.java:95) 
[2014-06-20 23:11:38 - Dictionary] at proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:91) 
[2014-06-20 23:11:38 - Dictionary] at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:71) 
[2014-06-20 23:11:38 - Dictionary] at proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:504) 
[2014-06-20 23:11:38 - Dictionary] at proguard.classfile.visitor.AllMethodVisitor.visitProgramClass(AllMethodVisitor.java:47) 
[2014-06-20 23:11:38 - Dictionary] at proguard.classfile.ProgramClass.accept(ProgramClass.java:346) 
[2014-06-20 23:11:38 - Dictionary] at proguard.classfile.ClassPool.classesAccept(ClassPool.java:116) 
[2014-06-20 23:11:38 - Dictionary] at proguard.optimize.Optimizer.execute(Optimizer.java:372) 
[2014-06-20 23:11:38 - Dictionary] at proguard.ProGuard.optimize(ProGuard.java:306) 
[2014-06-20 23:11:38 - Dictionary] at proguard.ProGuard.execute(ProGuard.java:115) 
[2014-06-20 23:11:38 - Dictionary] at proguard.ProGuard.main(ProGuard.java:492) 

Yerel yapılandırmamda bir sorun olabilir ... I tr -keep ve -dontwarn farklı sınıflar için ied ama şimdi hiçbir şey yardımcı oldu ...

Lütfen yardım edin!

cevap

0

google bir ben hala benim kütüphanelerini klasör elle android-destek-v4.jar eklemek zorunda kütüphane ve sağ tıklama olarak hizmet oynamak olmasına rağmen ve tutulma yolunda ekleyin.

benim proguard dosyası bu benziyordu:

-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontwarn com.google.** 
-dontpreverify 
-dontwarn android.support.v4.** 
-dontwarn org.apache.commons.codec.binary.Base64 
-verbose 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 





-keep class !mycode.** { *; } 

son nokta bu kadar sadece kodum gizlenmiştir; olun. Daha temiz.

1

İmzalı yapı oluştururken Prograud ile benzer bir sorunla karşılaştım ve birkaçı ile karşı karşıya kaldım. Aramadan sonra son olarak sorunumu çözebilirim. Eminim ki insanların bir tanesinden daha iyi bir çözümü vardır.

  1. En yeni SDK'yı ve desteklenen kitaplıkları saklayın.
  2. "/ sdk/tools/progaurd /" içinde bir "libs" klasörü oluşturun. "/ Sdk/tools/progaurd/libs /" klasöründeki uygulamanızın ihtiyaç duyduğu "android-support-v13.jar", "google-play-services.jar" gibi .jar dosyalarını kopyalayın.
  3. Uygulamanızın içindeki "libs" klasörünü kopyalayın. Ayrıca, "android-support-v4.jar" dosyasını gerektiği gibi kaldırmayın, burada v13 zaten destekliyor v4
  4. Oluşturma yolunuza .jar dosyasını ekleyin. Ayrıca, "android-support-v4.jar" öğesini oluşturma yolundan kaldırmayın, çünkü v13 zaten v4'ü desteklemektedir.
  5. Uygulama projenizin.properties dosyasında aşağıdaki satırları ekleyin. Lütfen hedefi sadece "android-22" olarak tutun.
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt 
# Project target. 
target=android-22 
android.library.reference.1=../../dev/sdk/extras/google/google_play_services/libproject/google-play-services_lib 
  1. My Progaurd dosyası "proguard-android.txt". Lütfen ihtiyacınıza göre değiştirin.
-optimizationpasses 2 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontskipnonpubliclibraryclassmembers 
-dontpreverify 
-dontshrink 
-verbose 

-dontwarn org.apache.** 
-dontwarn org.slf4j.** 
-dontwarn org.json.* 
-dontwarn org.mortbay.** 
-dontwarn org.apache.log4j.** 
-dontwarn org.apache.commons.logging.** 
-dontwarn org.apache.commons.logging.** 
-dontwarn org.apache.commons.codec.binary.** 
-dontwarn javax.xml.** 
-dontwarn javax.management.** 
-dontwarn java.lang.management.** 

-libraryjars libs/android-support-v13.jar 
-libraryjars libs/google-play-services.jar 


-dontwarn android.support.v13.**  
-keep class android.support.v13.** { *; } 
-keep interface android.support.v13.app.** { *; } 
-keep public class * extends android.support.v13.** 
-keep public class * extends android.app.Fragment 

-dontwarn com.google.android.gms.** 
-keep class com.google.android.gms.** { *; } 


-dontwarn com.google.code.** 
-dontwarn oauth.signpost.** 
-dontwarn twitter4j.** 
-dontwarn com.google.ads.** 
-dontwarn org.acra.** 


-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 
-allowaccessmodification 
-keepattributes *Annotation* 
-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable 
-repackageclasses '' 

-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 com.google.code.linkedinapi.** 
-keep public class android.content.** { *; } 



-keep class javax.** { *; } 
-keep class org.** { *; } 
-keep class twitter4j.** { *; } 
-keep class java.lang.management.** { *; } 
-keep class com.google.code.** { *; } 
-keep class oauth.signpost.** { *; } 


-keep class org.acra.** { *; } 



-keepclassmembers public class com.google.code.linkedinapi.client.impl.LinkedInApiXppClient { 
    public <init>(java.lang.String, java.lang.String); 
} 


-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 class **.R$* { 
    public static <fields>; 
} 


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

-keep public class * { 
    public protected *; 
} 

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

Saygılarımızla, Vik

İlgili konular