A. android里proguard.cfg文件有什么用
android里proguard.cfg文件是代码混淆用,是为了防止你的apk被反编译而代码全部暴露.不过目前的代码混淆只是把命名修改了一下而已,真正反编译时还是可以想办法还原出来的,所以不能真正的混淆。
其详解为:
-injars androidtest.jar【jar包所在地址】
-outjars out【输出地址】
-libraryjars 'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的库的jar,用于解析injars所指定的jar类】
-optimizationpasses 5
-dontusemixedcaseclassnames 【混淆时不会产生形形色色的类名 】
- 【指定不去忽略非公共的库类。 】
-dontpreverify 【不预校验】
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 【优化】
-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.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public abstract interface com.asqw.android.Listener{
public protected <methods>; 【所有方法不进行混淆】
}
-keep public class com.asqw.android{
public void Start(java.lang.String); 【对该方法不进行混淆】
}
-keepclasseswithmembernames class * { 【保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)】
native <methods>;
}
-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);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {【保护指定的类文件和类的成员】
public static final android.os.Parcelable$Creator *;
}
B. android代码混淆为什么不混淆activity
一般四大组件不混淆的,主要有以下原因:
1.四大组件声明必须在manifest中注册,如果混淆后类名更改,而混淆后的类名没有在2.manifest注册,是不符合Android组件注册机制的.
3.外部程序可能使用组件的字符串类名,如果类名混淆,可能导致出现异常
4.四大组件是要配置在清单文件的,混淆了找不到
C. 【Android性能优化】:ProGuard,混淆,R8优化
Android性能优化中,关于ProGuard、混淆和R8优化的要点如下:
ProGuard: 主要功能:包括压缩、优化和混淆。 工作流程:包含shrink、optimize、obfuscate和preverify四步骤。 作用:通过混淆代码,增加逆向工程的难度,保障App安全。
混淆: 关键:在于合理使用混淆规则,如keep class保留类名,keepclassmembers保护类的部分方法。 注意:需要处理特定场景,如AndroidManifest中的类、Gson/JSON解析、第三方库、WebView的JS调用、Parcelable和enum类型的保护规则。 保留:需要保持Serializable、自定义控件类、Activity子类、Parcelable接口等关键部分。
R8优化: 取代:从Android Studio 3.4.0开始,R8逐步取代ProGuard。 优势:在代码缩减、资源缩减、混淆和优化方面展现出了卓越性能。 配置:使用keep或@keep注解来保留特定代码,可以添加额外的自定义规则到proguardrules.pro文件中。 处理:开启minifyEnabled为true,R8会智能检测并移除未使用的代码,但需注意处理反射调用和JNI交互,以确保代码的正常运行。 资源缩减:通过shrinkResources属性实现资源缩减,需要设置白名单以避免不必要的资源混淆。 优化选项:如optimizationpasses、dontoptimize等,能帮助我们更好地进行代码精简。
综上所述,ProGuard和R8都是Android性能优化中重要的工具,通过合理使用混淆规则和R8的优化选项,可以有效地提升应用的性能和安全性。
D. Android 开发怎样做代码加密或混淆
首先因为基于java,所以别指望别人完全无法反编译。
用proguard吧,好处是就算被反编译,没有规律的变量名至少会造成阅读上的难度。
现在android sdk插件可以帮你自动生成proguard配置脚本,对于简单的混淆来说,完全可以实现傻瓜式代码混淆。如果你要保留一些关键字,请参考http://proguard.sourceforge.net/FAQ.html的命令说明修改proguard配置文件。
E. android打混淆包以后,BuildConfig.DEBUG还是true不是说,打混淆包以后,这个值会变成false么
混淆不混淆和BuildConfig.DEBUG无关,BuildConfig.DEBUG只取决于你build的方式。平时build都是true,只有通过export(导出)方式时才是false。导出功能在右键点击工程->Android Tools -> Export Signed Application Package。
再找不到的话就看这个问答http://stackoverflow.com/questions/9855834/when-does-adt-set-buildconfig-debug-to-false
建议学android变成多上stackoverflow,很多有用答复。