15

Androidスタジオでproguardを使用してアンドロイドアプリを構築していて、プロジェクトにライブラリjar(na .jar)は、na.jarのいくつかのクラスがビルド中にエラーを出すため、難読化と事前確認を省略したいと考えています。私はまだ、ビルドプロセス中にna.jar内の障害のあるクラスに関連する次のエラーを取得していますしかし、だから私のProGuardの設定ファイルでは、私は次のオプションAndroid Proguardの問題 - 難読化をスキップすると "java.io.IOException:Can not process class ..."エラーが発生する

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

を持っています。

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 

プロフアードは、難読化をスキップしてもクラスとjarを読み込みますか?私はproguardを使ってAndroidアプリを構築するのが初めてです。

更新#1

-dontpreverify 
-dontoptimize 
-dontshrink 

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

はい、難読化は、ProGuardのが何をするかの一部でしかありません - それは残りの部分をやっていきます未使用コードの削除などのライブラリ –

+0

Proguardはライブラリジャー(na.jar)の読み取り/処理をスキップできますか? – Nicky

+0

最適化を無効にするには、-optimizationsを使用してフィルタを追加します(これらの型/パッケージを最適化しないようにするには、!の前にregexを指定します)。私はこのリストがあなたの "keep"リストと同じであると推測しています。 –

答えて

0

これを試してみてください。

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

これは質問への答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューから](レビュー/低品質の投稿/ 14187008) –

+0

彼はjarファイルクラスをスキップしたかったので、このコードを書いて、@EliSadoff –

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.** 
関連する問題