transformClassesAndResourcesWithProguardForRelease विफल


83

मैं कंसोल में ग्रैडल के साथ अपना एंड्रॉइड एप्लिकेशन बनाने की कोशिश कर रहा हूं। लेकिन कार्य के बारे में नीचे त्रुटि हो रही है ': ऐप: ट्रांसफॉर्मक्लासएंडसॉइंट्सवेथप्रोएडगार्डऑर्लज':

build.gradle:

buildscript {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

एप्लिकेशन / build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion '24.0.2'
    defaultConfig {
        applicationId "com.XXX.XXX"
        minSdkVersion 14
        targetSdkVersion 24
        versionCode 1
        versionName "0.1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
    }
}


dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile('com.squareup.retrofit2:retrofit:2.1.0') {
        exclude module: 'okhttp'
    }
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.android.support:design:24.2.1'
    compile 'com.squareup.okhttp3:okhttp:3.4.1'
    compile 'com.squareup.retrofit2:converter-moshi:2.1.0'
    compile 'moe.banana:moshi-jsonapi:2.2.0'
    compile 'com.squareup.moshi:moshi-adapters:1.3.1'
    compile 'com.google.android.gms:play-services-maps:9.6.0'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.google.firebase:firebase-core:9.6.0'
    compile 'com.google.firebase:firebase-crash:9.6.0'
    testCompile 'junit:junit:4.12'
}

apply plugin: 'com.google.gms.google-services'

gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

./gradlew बिल्ड-stacktrace

यह अपवाद है जो मुझे मिल रहा है:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task
':app:transformClassesAndResourcesWithProguardForRelease'.

यह समस्या ऐप के रिलीज़ कॉन्फ़िगरेशन में प्रो-गार्ड सक्षम होने के कारण आ रही है। तो समाधान या तो प्रो-गार्ड को हटा दें या लिंक के स्निपेट के संकेतित कोड को
तैयार

जवाबों:


120

अपने प्रोगार्ड नियमों में इस कोड को जोड़ने का प्रयास करें, इसने मेरे लिए काम किया

-ignorewarnings
-keep class * {
    public private *;
}

यहाँ उत्तर पोस्ट किया गया था: कार्य के लिए निष्पादन विफल रहा ': ऐप: transformClassesAndResourcesWithProguardFrRRease


12
हालांकि यह काम करने के लिए लगता है, यह एक स्पष्टीकरण के लिए अच्छा होगा।
ड्रू स्ज़ुर्को

23
लेकिन इसका कोई फायदा नहीं है क्योंकि -सिस्टेंट क्लास * {पब्लिक प्राइवेट *; आपके सभी वर्गों को आपत्ति से बचाए रखेगा, इसलिए यहाँ कोई फायदा नहीं है।
राघव शर्मा

3
आपके कोड के ऊपर मेरी एपीके का उपयोग किया जाता है, जो मूल वर्ग के प्रदर्शन के बाद विघटित हो जाता है और कोड मेरी एपीके को सुरक्षित नहीं करता है ???
पंकज तलाविया

29
चेतावनी: यदि आप अपना कोड निजी रखना चाहते हैं तो इस उत्तर का उपयोग न करें।
डाका

इसके अलावा, इसका उपयोग करने से पुराने फोन संस्करणों के साथ असंगत हो गया।
लाल-शैतान

65

इस कोड को जोड़ें ..your-project/app/proguard-rules.pro

 -ignorewarnings

आपका हस्ताक्षरित APK सफलतापूर्वक जनरेट किया जाएगा ...

अपडेट करें :

यह बेहतर है कि आप अपने चेतावनियों -dontwarnया -keep कुंजियों का उपयोग करके अपने चेतावनी संदेशों को ठीक करें proguard-rules.pro... क्योंकि यदि आप उपयोग करते हैं (हो सकता है कि आपके पुस्तकालय) आपके कोड में जावा प्रतिबिंब का उपयोग करें तो एप्लिकेशन क्रैश हो जाएगा ...


@ रिची, मेरे पास एक proguard-rules.pro फ़ाइल नहीं है । क्या मुझे मैन्युअल रूप से एक बनाना चाहिए? ऐसा लगता है कि मैं रनटाइम में पैदा कर रहा हूंrelease { shrinkResources true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'proguard.cfg' }
एडम हर्विट्ज

@AdamHurwitz हाँ, आपको यह फ़ाइल मैन्युअल रूप से बनानी होगी।
CopsOnRoad

1
यह मेरे मामले में काम किया है। लेकिन मुझे लगता है कि यह अप्रासंगिक के रूप में कुछ के लिए घोषित किया गया है। मेरा मतलब है कि आपको रिलीज़ APK मिल सकती है, लेकिन असली समस्या अभी भी है।
डोरबागना

8

यह मेरे लिए काम करता है मुझे भी एक समर्थक gaurd.txt फ़ाइल में जोड़ना पड़ा

#### -- Picasso --
 -dontwarn com.squareup.picasso.**

 #### -- OkHttp --

 -dontwarn com.squareup.okhttp.internal.**

 #### -- Apache Commons --

 -dontwarn org.apache.commons.logging.**

     -ignorewarnings 
-keep class * {
public private protected *;
}

9
चेतावनी: यदि आप अपने कोड को निजी / संरक्षित रखना चाहते हैं, तो कृपया इस उत्तर का उपयोग न करें
बिलाल अहमद

जैसा कि मैं समझता हूँ कि यह "-स्टीकल क्लास *" मूल रूप से मोटापे और कक्षाओं को हटाने से बंद हो जाएगा। यदि आप ऐसा करना चाहते हैं, तो आप आसानी से build.gradle पर जा सकते हैं और minifyEnabled को गलत पर सेट कर सकते हैं और ProguardFiles लाइन को हटा सकते हैं।
फ्रैंककर्ण 12

क्या अब @FrankKrumnow रिलीज़ में सक्षम करने का कोई तरीका है?
एडम हर्विट्ज

एडम मैं कोई समर्थक नहीं हूं - अपने आप को और इसके साथ काफी संघर्ष करता हूं। लेकिन कृपया मेरी नई पोस्ट पर एक नजर डालिए। इसमें ऐसे उदाहरण शामिल हैं कि आप कुछ समूहों के समूहों की सुरक्षा कैसे कर सकते हैं - जैसे कि एंड्रॉइड व्यू का विस्तार करने वाली कक्षाएं। शायद यह एक शुरुआती बिंदु हो सकता है।
फ्रैंकफ्रंट

5

मैंने सिर्फ टिप्पणी से कुछ नहीं बदला है

// shrinkResources true
// minifyEnabled true

आप 2 दिनों के बर्बाद होने के बाद पहले से ही इस मुद्दे के लिए खोज की गई किसी भी रक्षक फ़ाइल को बदलना नहीं चाहते हैं


बाकी सभी सुझाव विफल थे, यह काम किया। मेरे मामले में मुझे 3rd पार्टी लाइब्रेरी को शामिल करने के कारण मल्टीडेक्स को चालू करना पड़ा, साथ ही SDK 27 में अपग्रेड करना पड़ा। यह त्रुटि अचानक सामने आई। इस उत्तर के लिए धन्यवाद!
स्टीफन मैककॉर्मिक

5
minifyEnabled अपने कोड के लिए किसी प्रकार का एन्क्रिप्शन लॉन्च करता है। जब आप इसे चालू नहीं रखेंगे तो हैकर के पास आसान काम होगा। उत्पादन-एपीके फ़ाइल पर इसे अक्षम करना बहुत जोखिम भरा है!
एड्रियन ग्रिगुटिस

इस समाधान का उपयोग न करें। यह जोखिम भरा है
जैक

@ इसमें क्या जोखिम है?
बृजेश तंवर

@ बृजेश तंवर: अगर मुझे एन्क्रिप्शन की ज़रूरत है तो क्या होगा ??
जैक

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

कृपया अपने कोड में उपर्युक्त कोड हटा दें। इसने मेरे लिए काम किया। यह केवल दी गई समस्या के लिए है।


प्रिय पांग। यह त्रुटि तब हुई जब मैंने हस्ताक्षरित एपीके उत्पन्न किया। मेरे वरिष्ठ निष्कासन में बाधा डालते हैं, फिर यह त्रुटि दूर हो गई
अयाज मुहम्मद

सभी पंक्तियों का उल्लेख किया गया है
अयाज मुहम्मद

1

मुझे वही त्रुटि संदेश मिला जब मैं प्रतिक्रिया-देशी-फायरबेस स्थापित करने के बाद एंड्रॉइड में रिलीज़ बिल्ड बनाने की कोशिश कर रहा था ।

ये मेरे द्वारा अनुसरण किए गए चरण हैं,

  1. उन सभी विन्यासों का करें जो वे प्रतिक्रिया-देशी-फायरबेस प्रलेखन में उल्लेख करते हैं।
  2. इस कमांड का उपयोग करके एक एंड्रॉइड ऐप बनाएं

    ./gradlew असेंबल करें

  3. यह त्रुटि संदेश मिला।

विफलता: बिल्ड अपवाद के साथ विफल हुआ।

  • क्या गलत हुआ: कार्य के लिए निष्पादन विफल रहा ': ऐप: transformClassesAndResourcesWithProguardForRelease'।

    नौकरी विफल, विवरण के लिए लॉग देखें

इस कोड को एंड्रॉइड / ऐप / बिल्ड.ग्रेड में बदलकर इस मुद्दे को हल किया

minifyEnabled true

इसके लिए

minifyEnabled enableProguardInReleaseBuilds

यह एकमात्र बदलाव था जो मैंने किया। इससे मेरा काम बनता है।



0

इस कोड का उपयोग 'proguard-rules.pro' में हल किया जा सकता है।

-keep class * {
public private protected *;
}

या

-keep class * {*;}
  • नोट: ऊपर दिए गए आदेशों को अनदेखा करते हैं

  • राज्य को बचाने के लिए ऊपर के बजाय इसका उपयोग कर सकते हैं

    -निगम वर्ग * * * ;;


यह सब पर
प्रहरी

0

एंड्रॉइड स्टूडियो में "बिल्ड" मेनू में "प्रोजेक्ट पुनर्निर्माण" पर क्लिक करें।


0

मैं काफी समय से proguard-rules.pro के साथ संघर्ष कर रहा हूँ और किसी भी तरह से यहाँ एक समर्थक नहीं हूँ! मैं अपनी फाइल पोस्ट कर रहा हूं यह दिखाने के लिए कि आपको -सी कक्षा * को बिना किसी पैरामीटर के नहीं करना चाहिए क्योंकि यह सभी अवरोधों को बंद कर देता है। हालांकि आप हर वर्ग की रक्षा कर सकते हैं जो एक निश्चित वर्ग या किसी भी वर्ग से फैलता है जो एक निश्चित इंटरफ़ेस को लागू करता है। आप किसी भी वर्ग की रक्षा कर सकते हैं जिसमें विशिष्ट तत्वों वाले एक निर्माता हैं। कृपया ध्यान दें कि मैंने हर एक पंक्ति पर टिप्पणी नहीं की क्योंकि मैं 100% यकीन नहीं करता कि सब कुछ क्या करता है - यह एक शिक्षित अनुमान की तरह अधिक है। मेरी परियोजना में ksoap2 (okhttp3, okio, XmlPull) शामिल हैं जो कि कई नियम हैं।

शायद यह आपके लिए एक शुरुआती बिंदु हो सकता है - आपको अभी भी अपनी कक्षाओं के लिए कुछ अतिरिक्त नियम लगाने की आवश्यकता हो सकती है।

-android
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable

-keep public class * extends android.app.Activity
-keepclasseswithmembers class * extends com.way4net.oner.lifa.plugin.ThemedFragment
-keepclasseswithmembers class * extends com.way4net.oner.lifa.plugin.ThemedActivity
-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
-keepattributes Signature #there were 1 classes trying to access generic signatures using reflection emfehlung von proguard selbst

-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 * extends android.content.Context {
    public void *(android.view.View);
    public void *(android.view.MenuItem);
}

-keepclassmembers class * implements android.os.Parcelable {
    static ** CREATOR;
}

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

-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn android.support.v4.**
#-dontwarn javax.annotation.**
#-dontwarn org.xmlpull.v1.**
-dontnote android.net.http.*
-dontnote org.apache.commons.codec.**
-dontnote org.apache.http.**
-dontnote okhttp3.**
-dontnote org.kobjects.util.**
-dontnote org.xmlpull.v1.**
-keep class okhttp3.** {
      *;
 }

-keep class org.xmlpull.v1.XmlSerializer {
    *;
}
-keep class org.xmlpull.v1.XmlPullParser{
    *;
}
-dontwarn org.xmlpull.v1.XmlPullParser

-keep class org.xmlpull.v1.XmlSerializer {
    *;
}
-dontwarn org.xmlpull.v1.XmlSerializer

-keep class org.kobjects.** { *; }
-keep class org.ksoap2.** { *; }
-keep class okio.** { *; }
-keep class org.kxml2.** { *; }
-keep class org.xmlpull.** { *; }


0

अपनी प्रोगार्ड फ़ाइल में -ignorewarnings जोड़ें और केवल उन वर्ग को रखें जिन्हें आप बाधित नहीं करना चाहते थे। यदि आप प्रूफ़ नियमों का उपयोग कर रहे हैं, तो कुछ पुस्तकालय अपने कुछ वर्गों को रखने का सुझाव देते हैं। विवरण के लिए अपने पुस्तकालयों पर जाएं


0

गुण जोड़ने के लिए इस लाइन को जोड़ें

android.enableR8=true

हाय अंबेश। आपके उत्तर के लिए धन्यवाद। आमतौर पर स्पष्टीकरण के साथ उत्तर का अधिक स्वागत किया जाता है। क्या आप अपने उत्तर में स्पष्टीकरण जोड़ना चाहेंगे? आप अपने उत्तर के स्वरूपण में भी सुधार कर सकते हैं।
मैक्सवी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.