参考文章:https://mp.weixin.qq.com/s/YAOraVMJ2gsWRichERobjA
1.assembleDebug命令
如果build文件没有指定签名,会默认使用android的debug签名。如果build文件指定了则会使用build文件指定的签名文件签名,这样构建出来的apk可以安装。
2.assembleRlease命令
只会使用build文件指定的签名,如果没有配置则构建出来的apk不会签名,将导致在手机上安装失败。
3.testOnly属性
android studio中直接执行run命令AS Run 起来的 Apk,会使用debug签名,不过安装不上,并不是签名的问题。而是因为testOnly的属性。
通过反编译demo_debug.apk可以看到清单文件的确有该属性的存在:
对于多年 Android 经验的开发者来说,如果曾经将 Run 出来的 Debug.apk 分享给别人时,早年间是可以正常安装的,那 testOnly 属性是在什么时候被加在 Debug.apk 上的呢?
虽然 FLAG_TEST_ONLY 属性最早可以追溯到 APK Level 4,但是它其实是在 Android Studio 3.0 上才被默认加入到 APK 中的。只有 AS 3.0+ 的 IDE 上,Run 出来的 APK,才会默认带上 testOnly 属性,这将阻止你使用正常的方式安装。
简单小结一下:
- 我们无法通过正常安装方式,安装一个带有 android:testOnly=“true” 的 Apk。
- 这个属性,是在 AS 3.0 中加入的。
3.1 如何安装带有testOnly属性的apk
只需要在 adb install 上,增加 -t 即可
3.2 如何去除testOnly标记
如果想要阻止 AS 在 Run 时,构建的 APK 中增加 android:testOnly 标记,可以在 gradle.properties 文件中,增加 android.injected.testOnly=false 即可。去除该标记后使用As Run构建的apk将是可以直接安装的。