应用发布前:开启Instant Run代码收缩后如何验证代码是否有变更?
我来帮你梳理几个实用的验证方法,亲测能帮你确认代码收缩是否真的在工作:
查看编译后的APK内容
Android Studio自带的「Profile APK」功能非常好用:找到你debug编译生成的APK(一般在app/build/outputs/apk/debug/目录下),右键选择「Profile APK」,打开后就能看到APK里的所有类、方法和字段列表。对比你的原代码,看看那些你觉得应该被移除的无用类/方法是否还存在。用命令行工具分析DEX文件
如果你习惯用命令行,可以用Android SDK build-tools里的dexdump工具。执行以下命令:dexdump -d your-app-debug.apk | grep "com.your.package.name"把
com.your.package.name换成你的应用包名,搜索结果里就能看到包名下保留的类和方法,对比原代码就能发现是否有被移除的内容。检查构建日志
看Android Studio的Build窗口,搜索「shrink」或「minify」关键词。如果代码收缩生效,你会看到类似「Shrinking code...」的日志,后面还会显示移除了多少类、方法或字段。哪怕数量不多,也说明收缩在工作——默认的debug规则可能不会移除太多代码,因为要保留调试相关的内容。添加无用代码做测试
故意写一段完全没用的代码,比如:public class UnusedTestClass { public void unusedTestMethod() { Log.d("Unused", "This code should be removed"); } }确保这段代码在项目里没有被任何地方引用,然后重新编译debug版本。再用上面的方法检查这个类是否还存在,如果被移除了,就说明代码收缩确实生效了。
调整ProGuard规则并测试
默认的proguard-android.txt对debug模式比较宽松,你可以在proguard-rules.pro里添加更严格的规则,比如:-dontwarn ** -keep public class * extends android.app.Activity -allowaccessmodification -overloadaggressively注意只添加必要的规则,避免破坏正常功能。重新编译后再检查代码变化,应该能看到更明显的收缩效果。
临时禁用Instant Run测试
有时候Instant Run的增量编译可能会影响代码收缩的效果,你可以先关闭它(路径:File > Settings > Build, Execution, Deployment > Instant Run,取消勾选),然后重新构建debug版本。如果这时候能看到代码被移除,说明Instant Run和代码收缩的配合有特殊逻辑,你可以再结合官方文档调整配置。
内容的提问来源于stack exchange,提问作者Mr. Nacho

