• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Android Framework 的AOSP :预编译模块添加

武飞扬头像
阿豪元代码
帮助577

我们可以在系统源码中添加:

  • 已经编译好的 C & CPP 可执行程序
  • 已经编译好的 C & CPP 库
  • 已经编译好的 Java 库即 jar 包
  • 已经编译好的 Android 库即 aar 包
  • 已经编译好的 apk
  • 配置文件

这些添加到 Android 系统源码中的无需借助源码的编译环境编译就能直接使用的资源我们称之为预编译模块

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,
}

接下来在 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 来自 玩转 AOSP 之自定义模块添加 中添加的 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 命令(mymathmain 引用了 libmymath 库),看是否能正确调用到我们添加的 so 库

adb shell
mymathmain

执行结果如下图所示:

3. JAR 包

首先我们把 玩转 AOSP 之自定义模块添加 中添加的 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"],
    product_specific: true,   
}

接下来我们编译系统,并执行 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预装 部分和自定义模块统一讲解。

参考资料

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanfekig
系列文章
更多 icon
同类精品
更多 icon
继续加载