Aosp源码上手指南目录:
- Android13 源码下载与编译
- Android13 增加 Product
- Android13 自定义模块增加
- Android13 预编译模块增加
- Android13 App 预装详解
常见的预编译模块有:
- 现已编译好的 C & CPP 可履行程序
- 现已编译好的 C & CPP 库
- 现已编译好的 Java 库即 jar 包
- 现已编译好的 Android 库即 arr 包
- 现已编译好的 apk
- 一些配置文件
1. C & CPP 可履行程序
BusyBox 是打包为单个二进制文件的中心 Unix 实用程序的调集。常用于嵌入式设备。
适用于 x86 架构的 busybox 可经过以下指令下载:
wget https://busybox.net/downloads/binaries/1.30.0-i686/busybox
接下来咱们把它增加到咱们的 aosp 中:
在 device/Jelly/Rice14/
目录下创立如下的目录结构:
prebuilt/
└── busybox
├── Android.bp
└── busybox
busybox 便是咱们之前的下载的文件。
其间 Android.bp 的内容如下:
cc_prebuilt_binary {
name: "busybox",
srcs: ["busybox"],
product_specific: true,
}
接下来在 aosp/device/Jelly/Rice14/Rice14.mk 中增加该模块
PRODUCT_PACKAGES += busybox
编译源代码,发动模拟器:
source build/envsetup.sh
lunch Rice14-eng
make -j16
emulator
进入 adb shell,履行 busybox 指令
adb shell
busybox
也能够运用 Android.mk 的办法来集成 busybox,将 Android.bp 改为 Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := busybox
LOCAL_MODULE := busybox
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_TAGS := optional
//LOCAL_MODULE_PATH := $(TARGET_OUT)/usr/share/
include $(BUILD_PREBUILT)
2. C & CPP 库
在 out/target/product/Rice14/obj/SHARED_LIBRARIES/libmymath_intermediates
目录下找到咱们之前增加的自定义模块的编译产品 libmymath.so
在 device/Jelly/Rice14/prebuilt
目录下创立如下的文件与文件夹:
libso/
└── libmymath
├── Android.bp
├── libmymath.so
└── my_math.h
其间 libmymath.so 是上面提到的编译产品。my_math.h 来自 Android13 自定义模块增加 中增加的 libmath2 源码库。
Android.bp 的内容如下:
cc_prebuilt_library_shared {
name: "libmymath",
arch: {
x86_64: {
srcs: ["libmymath.so"],
},
},
export_include_dirs: ["."],
compile_multilib: "64",
product_specific: true,
}
为了防止抵触,咱们把 libcpp/libmath 删去或许移到其他不相关目录中。
接下来,编译整个体系,敞开虚拟机
source build/envsetup.sh
lunch Rice14-eng
make -j16
emulator
进入 adb shell 环境,履行 mymathmain 指令,看是否能正确调用到咱们增加的 so 库
adb shell
mymathmain
履行成果如下图所示:
3. JAR 包
首先咱们把 Android13 自定义模块增加
中增加的 libtriangle 库的 Android.bp 修改如下:
java_library {
name: "libmytriangle",
installable: false,
product_specific: true,
srcs: ["**/*.java"],
sdk_version: "current"
}
主要是将 installable 的值修改为 false,这样打包出来的 jar 包才能被其他模块正常引证。
接下来编译取得 jar 包:
#device/Jelly/Rice14/libjava/libtriangle 目录下履行
mm
#编译完成后,会打印出编译产品路径
out/target/product/Rice14/obj/JAVA_LIBRARIES/libmytriangle_intermediates/javalib.jar
为防止抵触咱们把 增加的自定义模块
部分增加的 device/Jelly/Rice14/libjava/libtriangle
删去或许移动到其他地方。
在 libjava 下从头创立如下的目录结构:
libtriangle/
├── Android.bp
└── javalib.jar
其间 javalib.jar
是咱们之前增加的自定义模块的编译产品 out/target/product/Rice14/obj/JAVA_LIBRARIES/libmytriangle_intermediates/javalib.jar
Android.bp 的内容如下:
java_import {
name: "libmytriangle",
host_supported: true,
installable: false,
jars: ["javalib.jar"],
}
接下来咱们编译体系,并履行 trianglemain 模块,用以验证咱们的 jar 包是否正确增加到体系中:
保证 trianglemain 模块以增加到 product 中:
#~/aosp/device/Jelly/Rice14/Rice14.mk
PRODUCT_PACKAGES += hello \
libmytriangle \
trianglemain \ #以增加 trianglemain 模块
busybox \
mymathmain
编译体系,并发动模拟器:
source build/envsetup.sh
lunch Rice14-eng
make -j16
emulator
验证trianglemain 模块的履行:
adb shell
export CLASSPATH=/product/framework/trianglemain.jar
app_process /product/framework/ com.yuandaima.main.TriangleMain
履行成果如下
4. 经过 PRODUCT_COPY_FILES 将源码中的文件增加到 Android 文件体系中
PRODUCT_COPY_FILES 常用于产品的配置文件中,在本文中便是 Rice14.mk 文件,用于将源码的文件拷贝到 Android 文件体系中。
这儿看一个源码中的示例:
aosp/build/target/product/core_64_bit.mk
中有如下内容:
PRODUCT_COPY_FILES += system/core/rootdir/init.zygote64_32.rc:system/etc/init/hw/init.zygote64_32.rc
这一行表明将源码中的 system/core/rootdir/init.zygote64_32.rc
拷贝到 Android 文件体系的 system/etc/init/hw/init.zygote64_32.rc 文件中。
总结
本文介绍了几种预编译资源如何增加到体系中,是比较偏实操的内容,自己实际操作一遍即可掌握。Android 库,Android app 的增加会放到 Android13 App预装
部分和自定义模块一致解说。
参考资料
- How to include prebuilt library in Android.bp file?
- Android体系开发入门-5.增加预编译模块
- Android.bp 文件中引入aar、jar、so库正确编译办法(值得保藏)
- 在AOSP中增加jar包和aar包依靠