15

मैं एंड्रॉइड स्टूडियो में प्रोग्रार्ड के साथ एक एंड्रॉइड ऐप बना रहा हूं और मेरे प्रोजेक्ट में लाइब्रेरी जार है (na .jar) कि मैं obfuscation और preverification छोड़ना चाहूंगा क्योंकि na.jar से कुछ वर्ग मुझे निर्माण के दौरान त्रुटियां दे रहे हैं। तो मेरी ProGuard कॉन्फ़िग फ़ाइल में, मैं निम्नलिखित विकल्पों केएंड्रॉइड प्रोगार्ड इश्यू - अभी भी "java.io.IOException: कक्षा को संसाधित नहीं कर सकता ..." त्रुटि जब obfuscation छोड़ा जाता है

-dontpreverify 

# com.na, org.json are packages in na.jar, don't obfuscate the code in these packages 
-keep class com.na.** { *; } 
-keep interface com.na.** { *; } 
-keep class org.json.** { *; } 
-keep interface org.json.** { *; } 

हालांकि मैं अभी भी निर्माण की प्रक्रिया के दौरान na.jar में दोषपूर्ण वर्गों से संबंधित निम्न त्रुटियों हो रही है।

Caused by: java.io.IOException: Can't read [C:\StudioProjects\PBActivity\pBActivity\libs\na.jar(;;;;;;!META-INF/MANIFEST.MF)] (Can't process class [com/na/util/BinConverter.class] (256)) 
    at proguard.InputReader.readInput(InputReader.java:188) 
    at proguard.InputReader.readInput(InputReader.java:158) 
    at proguard.InputReader.readInput(InputReader.java:136) 
    at proguard.InputReader.execute(InputReader.java:66) 
    at proguard.ProGuard.readInput(ProGuard.java:207) 
    at proguard.ProGuard.execute(ProGuard.java:81) 
    at proguard.gradle.ProGuardTask.proguard(ProGuardTask.java:1074) 
    at com.android.build.gradle.tasks.AndroidProGuardTask.proguard(AndroidProGuardTask.java:87) 
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63) 
    ... 62 more 
Caused by: java.io.IOException: Can't process class [com/na/util/BinConverter.class] (256) 
    at proguard.io.ClassReader.read(ClassReader.java:112) 
    at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87) 
    at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87) 
    at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87) 
    at proguard.io.JarReader.read(JarReader.java:65) 
    at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65) 
    at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53) 
    at proguard.InputReader.readInput(InputReader.java:184) 
    ... 70 more 
Caused by: java.lang.ArrayIndexOutOfBoundsException: 256 
    at proguard.classfile.ProgramClass.getString(ProgramClass.java:116) 
    at proguard.classfile.io.ProgramClassReader.createAttribute(ProgramClassReader.java:990) 
    at proguard.classfile.io.ProgramClassReader.visitProgramMethod(ProgramClassReader.java:206) 
    at proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:149) 
    at proguard.classfile.ProgramClass.accept(ProgramClass.java:358) 
    at proguard.io.ClassReader.read(ClassReader.java:91) 
    ... 77 more 

तो क्या प्रोगार्ड अभी भी कक्षाओं और जारों को ओबफुसेशन छोड़ने के साथ पढ़ता है? मैं एंड्रॉइड ऐप बनाने के लिए प्रोगार्ड का उपयोग करने के लिए नया हूं।

अद्यतन # 1

-dontpreverify 
-dontoptimize 
-dontshrink 

-keep class com.na.** { *; } 
-keep interface com.na.** { *; } 
-keep class org.json.** { *; } 
-keep interface org.json.** { *; } 
+0

हाँ, कहानियो क्या ProGuard करता है का केवल एक भाग है - यह करने के लिए शेष भागों करना जारी रखेंगे अप्रयुक्त कोड इत्यादि को हटाने जैसे लाइब्रेरी –

+0

क्या प्रोजेवार्ड लाइब्रेरी जार (na.jar) को पढ़ने/प्रसंस्करण छोड़ना संभव है? – Nicky

+0

आप इन प्रकारों/पैकेजों को अनुकूलित करने के लिए इन्हें निर्दिष्ट करने के लिए पहले से regex निर्दिष्ट करें: का उपयोग करके फ़िल्टर जोड़ने के द्वारा ऑप्टिमाइज़ेशन अक्षम कर सकते हैं। मुझे लगता है कि यह सूची आपकी "रखी" सूची के समान होगी। –

उत्तर

0

इस प्रयास करें:

-dontwarn com.na.** 
-keep class com.na.** { *; } 
-keepattributes Signature 
-keepattributes Exceptions 
+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। किसी लेखक से स्पष्टीकरण की आलोचना या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/14187008) –

+0

वह जार फ़ाइल कक्षाओं को छोड़ना चाहता था, इसलिए मैंने इस कोड को उसकी मदद करने के लिए रखा @ एलीसाडॉफ़ –

2

मैं भी समर्थक गार्ड के साथ जारी है, लेकिन मैं Git हब और अधिक उपयोगी से निम्नलिखित कोड मिला।

Build.grade

buildscript { 
    repositories { 
     mavenCentral() 
     maven { 
      url 'https://oss.sonatype.org/content/repositories/snapshots/' 
     } 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.9.+' 
     classpath 'com.squareup.gradle:gradle-android-test-plugin:0.9.1-SNAPSHOT' 
    } 
} 
apply plugin: 'android' 
apply plugin: 'android-test' 

repositories { 
    mavenCentral() 
    maven { 
     url 'https://oss.sonatype.org/content/repositories/snapshots/' 
    } 
} 

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.1.0" 

    defaultConfig { 
     minSdkVersion 9 
     targetSdkVersion 19 
    } 

    signingConfigs { 
     debug { 
      storeFile file("debug.keystore") 
     } 

     release { 
      storeFile file("project.keystore") 
      storePassword "1234" 
      keyAlias "Project" 
      keyPassword "1234" 
     } 
    } 

    buildTypes { 
     release { 
      debuggable false 
      runProguard true 
      signingConfig signingConfigs.release 
      proguardFile getDefaultProguardFile('proguard-android-optimize.txt') 
     } 
    } 

    productFlavors { 
     defaultFlavor { 
      proguardFile 'proguard-rules.txt' 
     } 
    } 

    sourceSets { 
     main { 
      java.srcDirs = ['src/main/java', 'src-gen/main/java'] 
     } 
     instrumentTest.setRoot('src/test') 
    } 
} 

dependencies { 

    compile 'com.actionbarsherlock:actionbarsherlock:[email protected]' 
    compile 'com.android.support:support-v4:19.1.+' 
    compile 'de.greenrobot:greendao:1.3.7' 
    compile 'com.google.android.gms:play-services:4.4.52' 

    testCompile 'junit:junit:4.10' 
    testCompile 'org.robolectric:robolectric:2.1.+' 
    testCompile 'com.squareup:fest-android:1.0.+' 

    instrumentTestCompile 'junit:junit:4.10' 
    instrumentTestCompile 'org.robolectric:robolectric:2.1.+' 
    instrumentTestCompile 'com.squareup:fest-android:1.0.+' 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '1.8' 
} 

समर्थक गार्ड-नियम

#################################################################################################### 
    #################################################################################################### 
    #################################################################################################### 
    ######################################### PROGUARD ################################################# 
    #################################################################################################### 
    #################################################################################################### 
    #################################################################################################### 

    # This is a configuration file for ProGuard. 
    # http://proguard.sourceforge.net/index.html#manual/usage.html 
    -dontusemixedcaseclassnames 
    -dontskipnonpubliclibraryclasses 
    -verbose 

    # Optimization is turned off by default. Dex does not like code run 
    # through the ProGuard optimize and preverify steps (and performs some 
    # of these optimizations on its own). 
    #-dontoptimize 
    #-dontpreverify 

    # If you want to enable optimization, you should include the 
    # following: 
    -optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* 
    -optimizationpasses 5 
    -allowaccessmodification 
    # 
    # Note that you cannot just include these flags in your own 
    # configuration file; if you are including this file, optimization 
    # will be turned off. You'll need to either edit this file, or 
    # duplicate the contents of this file and remove the include of this 
    # file from your project's proguard.config path property. 

    -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.BackupAgent 
    -keep public class * extends android.preference.Preference 
    -keep public class * extends android.support.v4.app.Fragment 
    -keep public class * extends android.support.v4.app.DialogFragment 
    -keep public class * extends com.actionbarsherlock.app.SherlockListFragment 
    -keep public class * extends com.actionbarsherlock.app.SherlockFragment 
    -keep public class * extends com.actionbarsherlock.app.SherlockFragmentActivity 
    -keep public class * extends android.app.Fragment 
    -keep public class com.android.vending.licensing.ILicensingService 

    # For native methods, see http://proguard.sourceforge.net/manual/examples.html#native 
    -keepclasseswithmembernames class * { 
    native <methods>; 
    } 

    -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.app.Activity { 
    public void *(android.view.View); 
    } 

    # For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations 
    -keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
    } 

    -keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$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.** { *; } 
    # The support library contains references to newer platform versions. 
    # Don't warn about those in case this app is linking against an older 
    # platform version. We know about them, and they are safe. 
    -dontwarn android.support.** 
    -dontwarn com.google.ads.** 
संबंधित मुद्दे