下面是关于“Android studio 混淆+打包+验证是否成功”的完整攻略。
1. 什么是混淆
混淆(Obfuscation)是一种通过变更代码名称,使得代码难以理解和阅读的技术。在Android开发中,混淆可以有效的防止反编译和代码盗用。Android Studio为我们提供了混淆功能,我们可以在打包前进行混淆操作。
2. 如何进行混淆
2.1 启用混淆
在Android Studio中启用混淆功能非常简单。在Project的build.grade文件中添加以下代码:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
注意:该代码只能在Release版本中调用,所以你的混淆都是在Release打包的时候才会生效,Debug版本不会生效。
2.2 混淆规则配置
下面我们需要为混淆添加一些规则。混淆规则保存在proguard-rules.pro文件中,该文件位于app文件夹下。在这个文件中会列出需要保护的类、方法等。一些常见的混淆规则:
#保护Java反射类
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.internal.** { *; }
#保护不混淆的类
-keep class com.example.MainApplication { *; }
-keep class * extends android.support.design.widget.AppBarLayout { *; }
#保护Android支付
-keep class com.android.vending.billing.** {*;}
-keepclassmembers class com.android.vending.billing.** {*;}
#保护Okhttp、Retrofit等网络请求库
-keep class okhttp3.** { *; }
-keep class retrofit2.** { *; }
-keepclasseswithmembers class * {
@retrofit2.http.* <methods>;
}
#保护AndroidX相关
-keep class androidx.appcompat.app.** {*;}
3. 打包生成APK
打包生成APK正常打包的方式,只需选择release版本即可,然后运行gradle的assembleRelease命令即可。
4. 验证混淆是否成功
4.1 查看APK文件
在打包后的app/build/outputs中的apk文件里,先解压apk包,可以看到其中的classes.dex文件(里面是被混淆的代码)。
4.2 反编译apk文件
可以使用工具将apk文件反编译,然后查看代码是否被混淆了。
示例1:
public class MainActivity extends AppCompatActivity {
private final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
/**
*
*/
private void initView() {
TextView textView = findViewById(R.id.tv_title);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
jumpToSecondActivity();
}
});
}
/**
* 跳转到SecondActivity
*/
private void jumpToSecondActivity() {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
}
可以看到,我们在代码中添加了打印日志的语句,那么我们可以通过配置混淆规则,保护该类不被混淆:
#保护MainActivity类
-keep class com.example.myapplication.MainActivity { *; }
经过混淆后,MainActivity的class文件中的名称被全部打乱。
示例2:
添加了类似于AES加密等的处理的代码,为了保护该部分代码不被其他人破解,我们同样需要保护该代码不被混淆:
#保护加解密处理的类
-keep class com.example.myapplication.AESUtil { *; }
经过混淆后,与AES加解密相关的class文件中的名称被全部打乱。
那么我们现在可以通过查看混淆后是否能正常运行来验证混淆是否成功。如果程序没有出现错误并且运行正常,则说明混淆成功。
希望这次的回答能够帮到您,如有遗漏请谅解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android studio 混淆+打包+验证是否成功 - Python技术站