2014-06-20 13 views
6

के साथ त्रुटि लौटाई मैंने अपने एप्लिकेशन में Google Play Services लाइब्रेरी को जोड़ा। सब कुछ ठीक काम करता है लेकिन मेरे एपीके का आकार 350 केबी से 1.6 एमबी तक 4 (!) बार में बढ़ता है। Google Play Services लाइब्रेरी से अप्रयुक्त कक्षाओं को निकालने के लिए मैं ProGuard का उपयोग करने का निर्णय लेता हूं। लेकिन अब मैं प्रोजेक्ट नहीं चला सकता या इसे एपीके पर निर्यात नहीं कर सकता क्योंकि प्रोगार्ड ने त्रुटि वापस कर दी है। जब मैं जीपीएस लिब का उपयोग नहीं करता हूं तो मुझे निर्यात के साथ कोई समस्या नहीं है लेकिन मैं इस पुस्तकालय के साथ एपीके नहीं बना सकता। मैंने इस समस्या के बारे में बहुत कुछ पढ़ा लेकिन मुझे जो भी समाधान मिला वह मेरी मदद नहीं करता था।प्रोगार्ड ने Google Play Services लाइब्रेरी

यहाँ मेरी ProGuard-project.txt (सिफारिश here के रूप में)

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

यहाँ है मेरी 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.** { *;} 

और यहाँ एक त्रुटि है कि मैं निर्यात के बाद प्राप्त है apk रहे हैं:

[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) 

शायद मेरे स्थानीय कॉन्फ़िगरेशन के साथ कुछ गलत ... मैं tr -keep और -dontwarn विभिन्न वर्गों में ied किया गया लेकिन अब कुछ भी मदद नहीं मिली ...

कृपया मेरी मदद करें!

उत्तर

4

अपनी परियोजना के लिए android-समर्थन-v4.jar जोड़े

0

भले ही मैं गूगल एक पुस्तकालय और राइट क्लिक मैं अभी भी करने के लिए मेरे libs फ़ोल्डर मैन्युअल एंड्रॉयड-support-v4.jar जोड़ने के लिए किया था के रूप में सेवाओं खेलने था और ग्रहण में पथ बनाने के लिए जोड़ें।

मेरी ProGuard फ़ाइल इस तरह देखा:

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

अंतिम पंक्ति बनाने ऐसा केवल मेरे अस्पष्ट कोड है। यह और अधिक क्लीनर है।

1

हस्ताक्षर किए निर्माण के दौरान मुझे इसी तरह की समस्या का सामना करना पड़ रहा है और प्रोग्राड के साथ कुछ अन्य का सामना करना पड़ रहा है। बहुत सारी खोज के बाद, अंततः मैं अपनी समस्या का समाधान करने में सक्षम हूं। मुझे यकीन है कि लोगों के पास एक से बेहतर समाधान है।

  1. नवीनतम एसडीके और समर्थित लाइब्रेरी रखें।
  2. "/ sdk/tools/progaurd /" के भीतर एक फ़ोल्डर "libs" बनाएँ।
  3. कॉपी .jar फ़ाइलें उदाहरण "android-समर्थन-v13.jar के लिए", "google-प्ले-services.jar" है कि "/ SDK/उपकरण/progaurd/libs /" फ़ोल्डर में अपने आवेदन के द्वारा की जरूरत है।
  4. अपने आवेदन "libs" फ़ोल्डर में .jar कॉपी करें। "एंड्रॉइड-सपोर्ट-वी 4.जर" को भी हटाएं क्योंकि इसकी आवश्यकता नहीं है, यहां v13 पहले से ही v4
  5. को अपने निर्माण पथ में .jar फ़ाइल जोड़ें। बिल्ड पथ से "android-support-v4.jar" को भी हटाएं क्योंकि इसकी आवश्यकता नहीं है, यहां v13 पहले से ही v4 का समर्थन करता है।
  6. अपनी एप्लिकेशन project.properties फ़ाइल में नीचे पंक्तियां जोड़ें। कृपया लक्ष्य को "एंड्रॉइड -22" के रूप में ही रखें।
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. मेरे Progaurd फ़ाइल "ProGuard-android.txt"। कृपया अपनी आवश्यकता के अनुसार इसे बदलें।
-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; 
} 

शुभकामनाओं सहित, विक

2

आप का उपयोग ग्रहण एडीटी हैं: तो आप पुस्तकालय की एक प्रति को संदर्भित किया जाना चाहिए Google Play सेवाओं है कि आप अपने विकास को कॉपी किया कार्यक्षेत्र-आप चाहिए सीधे एंड्रॉइड एसडीके निर्देशिका से लाइब्रेरी का संदर्भ नहीं है।

https://developers.google.com/android/guides/setup

संबंधित मुद्दे