1. 首页 > 科技

android打开混淆之后,打包release版报异常,但是包还是打出来了?

android打开混淆之后,打包release版报异常,但是包还是打出来了?

Android混淆打包问题,已经添加相应配置,可是还是报错

一直都在用第三方的移动应用加固,比如爱加密,包含了代码混淆等等,省了很多功夫

android项目中加入zxing,混淆打包出错,求解决

写在视图xml中的onClick响应出错. 因为写在xml中的onClick是通过反射调用的, proguard认为它们没有在代码中被调用过, 所以将它们从代码中除掉或改名了. 解决方法:

在proguard.cfg中添加以下代码, 就可以防止被配在视图xml中的onClick方法被proguard优化掉

-keepclassmembers class * extends android.app.Activity {

public void *(android.view.View);

}123123

jni反调Java方法

这些类或方法同样可能会被proguard认为没有调用过而被除掉, 或都被改名. 这些方法最好统一写在一个类中, 然后这个类不作优化, 或是找出所有jni调用过的类与方法, 在proguard.cfg中配置, 不对它们作优化

其它反射调用的java类与方法

使用反射时一定要注意proguard可能会认为那些方法未被调用过, 会在代码优化过程中将它们改名或除去. 在使用反射的地方一定要在proguard.cfg中配置, 不优化反射调用过的类和方法

最后在proguard优化过后会产生一些文件

dump.txt – 描述.apk文件中所有类文件间的内部结构

mapping.txt – 列出了原始的类,方法和字段名与混淆后代码间的映射。这个文件很重要,当你从release版本中收到一个bug报告时,可以用它来翻译被混淆的代码。

seeds.txt – 列出了未被混淆的类和成员

usage.txt – 列出了从.apk中删除的代码

要注意分析mapping.txt与usage.txt看xml视图中写的onClick响应函数, jni调用到的java类与方法, 反射调用过的类与方法是否被混淆或重命名

-keep class com.badlogic.gdx.backends.Android.**{ *;}

的只是不混淆:这个包下的类(不包括子包里的东西),用到一个第三文的类就要把这个类所在的包,像上面加上

还要注意的是android-support-v4.jar这个包问题,这里加上了对这个jar包的处理

第三方jar的混淆,

-optimizationpasses 5

-dontusemixedcaseclassnames

-dontskipnonpubliclibraryclasses

-dontpreverify

-verbose

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity // 继承activity,application,service,broadcastReceiver,contentprovider....不进行混淆

-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.BackupAgentHelper

-keep public class * extends android.preference.Preference

-keep public class com.android.vending.licensing.ILicensingService123456789101112131415123456789101112131415

-libraryjars /libs/android-support-v4.jar

-libraryjars /libs/gdx-backend-android.jar

-libraryjars /libs/gdx.jar123123

// 这里不对第三方的jar包的提出WARN

-dontwarn com.badlogic.**

-dontwarn android.support`这里写代码片`.v4.**

-dontwarn android.support.v4.view.**12341234

// 这里对第三方jar包的类不进行混淆

-keep class com.badlogic.gdx.backends.android.**{ *;}

-keep class com.badlogic.gdx.**{ *;}

-keep class com.badlogic.gdx.graphics.g2d.**{ *;}

-keep class com.badlogic.gdx.graphics.**{ *;}

-keep class android.support.v4.view.**{ *;}123456123456

// 这里第三方JAR包处理结束

-keepclasseswithmembernames class * { // natvie 方法不混淆

native ;

} 12341234

-keepclasseswithmembers class * {

// 对于所有类,有这个构造函数不进行混淆,主要是为了在layout中的,自定义的view

public (android.content.Context, android.util.AttributeSet);

} 12341234

-keepclasseswithmembers class * {

public (android.content.Context, android.util.AttributeSet, int);

} 123123

-keepclassmembers class * extends android.app.Activity {

// 这个主要是在layout 中写的onclick方法android:onclick="onClick",不进行混淆

public void *(android.view.View);

} 12341234

-keepclassmembers enum * {

public static **[] values();

public static ** valueOf(java.lang.String);

} 12341234

-keep class * implements android.os.Parcelable {

public static final android.os.Parcelable$Creator *;

}

Android studio混淆打包的时候一直失败

就是找不到指定的混淆文件,看看项目中有没有混淆文件,指定的路径是否一致。

android打混淆包以后,BuildConfig.DEBUG还是true?不是说,打混淆包以后,这个值会变成false么

混淆不混淆和BuildConfig.DEBUG无关,BuildConfig.DEBUG只取决于你build的方式。平时build都是true,只有通过export(导出)方式时才是false。导出功能在右键点击工程->Android Tools -> Export Signed Application Package。

再找不到的话就看这个问答http://stackoverflow/questions/9855834/when-does-adt-set-buildconfig-debug-to-false

建议学android变成多上stackoverflow,很多有用答复。