基于 Android 11 源码
根据网上的教程, 自己先捣鼓一波:
frameworks\base\services 创建 hzyd文件夹
Android.bp内容:
android_library_import {
name: "services.hzyd",
aars: ["MobileSDK-release.aar"],
sdk_version: "current",
}
-
修改 frameworks\base\Android.bp
在任意java_library 节点引用这个模块即可 -
重新编译 make j80
重新编译系统, 成功后,验证代码有没有增加到framework.jar中
直接用jd-gui 打开是看不到的, 里面分了很多个 classes.dex
将framework.jar 解压出来, 用 d2j-dex2jar 反编译成jar
没毛病, 自定义的相关类都在framework.jar里了.
-
刷机 将 out\target\product\rk3568_r\super.img 刷入系统.
-
验证SDK是否能调用
compileOnly 表示只参与编译不参与打包
直接运行APP看看效果
毫无疑问, 直接崩溃了, 原因是这个属于未公开的API, android 11不让上层应用调用.
将测试应用切换成系统签名后重新运行.
由于客户的应用是自己的签名, 并不属于系统应用, 于是重新修改编译, 将源代码直接复制到framework中.
将代码复制到 frameworks\base\core\java 目录下
设置基线检查, 忽略自定义包名
修改: frameworks\base\StubLibraries.bp
packages_to_document{
"com.xxxxx", //你的包名
}
修改: frameworks\base\Android.bp
metalava_framework_docs_args = ... +
"--api-lint-ignore-prefix com.xxxx. "
-
更新系统API 执行 make update-api
-
重新编译 make -j80
-
刷入 super.img 验证OK 特此记录.