gpt4 book ai didi

java - Android Proguard 问题 - 仍然得到 "java.io.IOException: Can' t 进程类...“跳过混淆时出错

转载 作者:IT老高 更新时间:2023-10-28 23:36:01 26 4
gpt4 key购买 nike

我正在 Android Studio 中构建一个带有 proguard 的 android 应用程序,我的项目有一个库 jar (na.jar),我想跳过混淆和预验证,因为 na.jar 中的一些类在构建过程中给我错误.所以在我的 proguard 配置文件中,我有以下选项

-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

那么即使跳过了混淆,proguard 仍然会读取类和 jar 吗?我是使用 proguard 构建 android 应用程序的新手。

更新 #1

-dontpreverify
-dontoptimize
-dontshrink

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

最佳答案

我也遇到了 pro guard 的问题,但我发现 git hub 中的以下代码更有用。

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:4.4.0@aar'
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.**

关于java - Android Proguard 问题 - 仍然得到 "java.io.IOException: Can' t 进程类...“跳过混淆时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34584775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com