2015-08-22 8 views
7

मुझे Play Store के लिए एक हस्ताक्षरित एपीके उत्पन्न करने की आवश्यकता है। (एंड्रॉइड स्टूडियो का उपयोग करके) यदि मैं बिना किसी प्रोजेक्ट के करता हूं (minifyEnabled को build.gradle में गलत) सभी ठीक काम करता है!एंड्रॉइड ने एपीके पीढ़ी पर हस्ताक्षर किए: संदर्भित वर्ग/विधि के लिए प्रोगार्ड अपवाद नहीं मिला

तो मैं इसे सक्रिय डिफ़ॉल्ट पैरामीटर के साथ:

buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

मैं इन चेतावनियों

:app:proguardRelease 
Warning: com.android.volley.error.VolleyErrorHelper$1: can't find superclass or interface com.google.gson.reflect.TypeToken 
Warning: com.android.volley.error.VolleyErrorHelper: can't find referenced class com.google.gson.Gson 
Warning: com.android.volley.error.VolleyErrorHelper: can't find referenced class com.google.gson.Gson 
Warning: com.android.volley.error.VolleyErrorHelper: can't find referenced method 'java.lang.reflect.Type getType()' in program class com.android.volley.error.VolleyErrorHelper$1 
Warning: com.android.volley.error.VolleyErrorHelper: can't find referenced class com.google.gson.Gson 
Warning: com.android.volley.error.VolleyErrorHelper$1: can't find referenced class com.google.gson.reflect.TypeToken 
Warning: com.android.volley.error.VolleyErrorHelper$1: can't find referenced class com.google.gson.reflect.TypeToken 
Warning: com.android.volley.error.VolleyErrorHelper$1: can't find referenced class com.google.gson.reflect.TypeToken 
Warning: com.android.volley.request.GsonRequest: can't find referenced class com.google.gson.Gson 
Warning: com.android.volley.request.GsonRequest: can't find referenced class com.google.gson.Gson 
Warning: com.android.volley.request.GsonRequest: can't find referenced class com.google.gson.Gson 
Warning: com.android.volley.request.GsonRequest: can't find referenced class com.google.gson.JsonSyntaxException 
Warning: com.android.volley.request.GsonRequest: can't find referenced class com.google.gson.JsonSyntaxException 
Warning: com.android.volley.request.GsonRequest: can't find referenced class com.google.gson.Gson 
Warning: com.android.volley.request.GsonRequest: can't find referenced class com.google.gson.JsonSyntaxException 
Warning: com.squareup.okhttp.internal.huc.HttpsURLConnectionImpl: can't find referenced method 'long getContentLengthLong()' in program class com.squareup.okhttp.internal.huc.HttpURLConnectionImpl 
Warning: com.squareup.okhttp.internal.huc.HttpsURLConnectionImpl: can't find referenced method 'long getHeaderFieldLong(java.lang.String,long)' in program class com.squareup.okhttp.internal.huc.HttpURLConnectionImpl 
Warning: okio.DeflaterSink: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 
Warning: okio.Okio: can't find referenced class java.nio.file.Files 
Warning: okio.Okio: can't find referenced class java.nio.file.Files 
Warning: okio.Okio: can't find referenced class java.nio.file.Files 
Warning: okio.Okio: can't find referenced class java.nio.file.Path 
Warning: okio.Okio: can't find referenced class java.nio.file.OpenOption 
Warning: okio.Okio: can't find referenced class java.nio.file.Path 
Warning: okio.Okio: can't find referenced class java.nio.file.OpenOption 
Warning: okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 
Warning: okio.Okio: can't find referenced class java.nio.file.Path 
Warning: okio.Okio: can't find referenced class java.nio.file.OpenOption 
Warning: okio.Okio: can't find referenced class java.nio.file.Path 
Warning: okio.Okio: can't find referenced class java.nio.file.OpenOption 
Warning: okio.Okio: can't find referenced class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 
Warning: there were 28 unresolved references to classes or interfaces. 
     You may need to add missing library jars or update their versions. 
     If your code works fine without the missing classes, you can suppress 
     the warnings with '-dontwarn' options. 
     (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass) 
Warning: there were 3 unresolved references to program class members. 
     Your input classes appear to be inconsistent. 
     You may need to recompile the code. 
     (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember) 
Exception while processing task 
java.io.IOException: Please correct the above warnings first. 
    at proguard.Initializer.execute(Initializer.java:473) 
    at proguard.ProGuard.initialize(ProGuard.java:233) 
    at proguard.ProGuard.execute(ProGuard.java:98) 
    at proguard.gradle.ProGuardTask.proguard(ProGuardTask.java:1074) 
    at com.android.build.gradle.tasks.AndroidProGuardTask.doMinification(AndroidProGuardTask.java:137) 
    at com.android.build.gradle.tasks.AndroidProGuardTask$1.run(AndroidProGuardTask.java:113) 
    at com.android.builder.tasks.Job.runTask(Job.java:48) 
    at com.android.build.gradle.tasks.SimpleWorkQueue$EmptyThreadContext.runTask(SimpleWorkQueue.java:41) 
    at com.android.builder.tasks.WorkQueue.run(WorkQueue.java:227) 
    at java.lang.Thread.run(Thread.java:745) 
:app:dexRelease UP-TO-DATE 
:app:validateExternalOverrideSigning 
:app:packageRelease 

और इस संदेश के साथ निर्माण प्रक्रिया रोक प्राप्त करते हैं:

Error:Execution failed for task ':app:packageRelease'. 
> Unable to compute hash of ...\app\build\intermediates\classes-proguard\release\classes.jar 

कई के बाद तम्बू मुझे चेतावनी हटाने के लिए एक रास्ता मिला है वाई वें मेरी "proguard-rules.pro" में इस लाइनों:

-dontwarn com.android.volley.** 
-dontwarn com.squareup.okhttp.** 
-dontwarn okio.** 

लेकिन निर्माण प्रक्रिया अभी भी गलत हो जाता है! किसी के पास इस समस्या के लिए कोई समाधान है?

धन्यवाद! डेविड

उत्तर

2

आपको इसके बजाय संदर्भित कक्षा में dontwarn लागू करना होगा।

उदाहरण के लिए:

-dontwarn com.google.gson.** 
-dontwarn java.nio.file.** 
+0

हाय रेमंड। आप सही हैं ... लिखने के रूप में डॉनवॉर्न शॉल हो। लेकिन यह प्रोगुआर्ड के साथ एपीके उत्पन्न करने के लिए पर्याप्त नहीं था। आपके समर्थन के लिए धन्यवाद! – Davide

5

कई attemps ... यहाँ समाधान के बाद:

पहले dontwarn के रूप में रेमंड ने सुझाव दिया कॉन्फ़िगर (शायद यह आवश्यक नहीं है, लेकिन मैं उसे छोड़ दिया):

:
-dontwarn com.google.gson.** 
-dontwarn java.nio.file.** 
-dontwarn org.codehaus.mojo.animal_sniffer.** 
-dontwarn com.squareup.okhttp.internal.huc.** 
-dontwarn com.android.volley.error.** 

तब मेरे पुस्तकालय को छोड़ Proguard कॉन्फ़िगर 10

अन्यथा संकलन ठीक था लेकिन रनटाइम पर एप्लिकेशन क्रैश हो गया। तो, इस समस्या से बचने के लिए, मैं जोड़ दिया है इन पंक्तियों:

-keep class android.support.design.widget.** { *; } 
-keep interface android.support.design.widget.** { *; } 
-dontwarn android.support.design.** 

कुछ जानकारी इस धागे से पाया पर आधारित

java.lang.RuntimeException: Could not inflate Behavior subclass

इस सेटिंग मैं एक उत्पन्न करने में सक्षम हूँ के साथ

मेरे ऐप के हस्ताक्षरित एपीके।

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