问题描述
在面对Android系统工作时,很大一部分工作是对一些apk的bug进行修复。如何单独编译修改过的应用,快速进行验证,对提高工作效率非常重要。但是在Android Q中,很多应用都是用Android.bp代替了Android.mk。而且一些应用单独编译,也不会在指定目录生成应用的apk,而是生成dex或者odex格式。
解决方法
对于应用源码根目录里面包含Android.mk的情况,只需要在mk文件中添加:
LOCAL_DEX_PREOPT := false
对于应用源码根目录包含Android.bp的情况,添加:
dex_preopt:{
enabled: false
},
以DeskClock里面的源码为例,Android.bp修改如下:
android_app {
name: "DeskClock",
resource_dirs: ["res"],
sdk_version: "current",
overrides: ["AlarmClock"],
dex_preopt:{
enabled: false
},
srcs: [
"src/**/*.java",
"gen/**/*.java",
],
product_specific: true,
static_libs: [
"androidx.annotation_annotation",
"androidx.collection_collection",
"androidx.arch.core_core-common",
"androidx.lifecycle_lifecycle-common",
],
}
编译
source和lunch之后,可以直接用:
make DeskClock
生成的目录一般在:
out\target\product\***\system\app
out\target\product\***\system\priv-app
out\target\product\***\system\product\app
out\target\product\***\system\product\priv-app
具体路径在最后的编译成功信息里面会包含。