blog.csdn.net/weixin_4576… 环境 Android Studio版本:
Android Studio Dolphin | 2021.3.1 Patch 1 Build #AI-213.7172.25.2113.9123335, built on September 30, 2022 1 2 gradle版本:
distributionBase=GRADLE_USER_HOME distributionUrl=services.gradle.org/distributio… distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME 1 2 3 4 5 Android 源码的Build ID及其Tag:
SQ1A.220205.002 android-12.0.0_r28 1 2 步骤 创建一个Android Studio 新项目 将该项目复现到源码/vendor/${yout company}/apps/中,并且复制app/src/main/AndroidManifest.xml到项目根目录。
TestCompileOnAosp/
├── Android.bp
├── AndroidManifest.xml
├── Android.mk\_bak
├── app
├── build.gradle
├── gradle
├── gradle.properties
├── gradlew
├── gradlew\.bat
├── local.properties
└── settings.gradle
注意:由于gradle-7.4会Move package from Android manifest to build files,创建出来的AndroidManifest-manifest中是没有指定包名package的,但是Android 源码编译需要添加,则需要在app/src/main/AndroidManifest.xml的manifest标签下,添加包名package="com.xxx.xxxxxxx"。
编写编译脚本 有两种:
Android.mk
\#指的当前目录变量LOCAL\_PATH
LOCAL\_PATH:= $(call my-dir)
include $(CLEAR\_VARS)
\#LOCAL\_MODULE\_TAGS := user eng tests optional
\#user: 指该模块只在user版本下才编译
\#eng: 指该模块只在eng版本下才编译
\#tests: 指该模块只在tests版本下才编译
\#optional:指该模块在全部版本下都编译
LOCAL\_MODULE\_TAGS := optional
\#指定apk的src目录
LOCAL\_SRC\_FILES := $(call all-java-files-under, app/src/main/java) #指定apk的res目录
LOCAL_RESOURCE_DIR := \
$(LOCAL\_PATH)/app/src/main/res \\
\#指定额外的Manifest,这里的Manifest和根目录Manifest其实是合并关系,不是覆盖
LOCAL\_FULL\_LIBS\_MANIFEST\_FILES:=\$(LOCAL\_PATH)/app/src/main/AndroidManifest.xml
LOCAL\_STATIC\_ANDROID\_LIBRARIES := \
androidx.appcompat\_appcompat \
com.google.android.material\_material \
androidx-constraintlayout\_constraintlayout \\
\#要编译成apk的名字
LOCAL\_PACKAGE\_NAME := TestCompileOnAosp
\#去除dex相关优化,这样好处就是我们编译出来apk是可以正常adb install的不然经过dex优化后,其实apk是个空壳
LOCAL\_DEX\_PREOPT := false
\#设置该标记后会使用sdk的hide的api來编译。编译的APK中使用了系统级API,必须设定该值
LOCAL\_PRIVATE\_PLATFORM\_APIS := true
\#平台签名
LOCAL\_CERTIFICATE := platform
include \$(BUILD\_PACKAGE)
Android.bp
android\_app{
name: "TestCompileOnAosp",
srcs: \["app/src/main/java/\*\*/\*.java"],
resource\_dirs: \["app/src/main/res"],
additional\_manifests: \[ //和Android.mk一样会在根目录也有个AndroidManifest只不过他是个壳,这里这个才是真正的,二者会合并
"app/src/main/AndroidManifest.xml",
],
static\_libs: \[
"androidx.appcompat\_appcompat",
"com.google.android.material\_material",
"androidx-constraintlayout\_constraintlayout",
],//依赖的jar包
dex\_preopt: {
enabled: false,
},
platform\_apis: true,//。和Android.mk中的 LOCAL\_PRIVATE\_PLATFORM\_APIS的作用相同
certificate: "platform",//代表签名
}
Install: out/target/product/xxxx/system/app/XxxxxApp
1 附:LOCAL_STATIC_ANDROID_LIBRARIES所需要的静态库,可以在源码的prebuilts/sdk/current中查找 ———————————————— 版权声明:本文为CSDN博主「weixin_45767368」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/weixin_4576…