前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android源码折腾(三)新增项目

Android源码折腾(三)新增项目

原创
作者头像
笔头
修改2022-07-20 20:01:23
8660
修改2022-07-20 20:01:23
举报
文章被收录于专栏:Android记忆

一、新建项目

新建项目 名称 TestApp

二、项目拷贝源码中

把TestApp项目中的main目录直接 拷贝到Android源码 packages/apps/TestApp 目录中,

1.添加android.bp

可以参考源码其他app android.bp文件

内容如下:

代码语言:javascript
复制
android_app {
    name: "TestApp",
    static_libs: ["com.google.android.material_material"], //导入相关包,不然编译不过
    srcs: ["**/*.java"],
    platform_apis: true,
}

最后目录结构如下:

2.修改build/target/product/base.system.mk

在PRODUCT_PACKAGES 后面追加当前项目名

3.执行编译

执行mm命令,编译该项目,可以编译成功,但是运行模拟器中并没有该App。

这个问题就和上次添加服务一样,必须执行make命令才可以。

执行make后,执行emulator命令, 再次运行模拟器。

看起来好像成功了。

我们在TestApp项目里调用bird服务看看

代码如下:

但是点击hello后,报错,

代码语言:javascript
复制
2022-07-19 15:12:41.796 1820-1820/com.android.mytest W/SystemServiceRegistry: No service published for: bird
2022-07-19 15:12:41.796 1820-1820/com.android.mytest D/AndroidRuntime: Shutting down VM

这个bird是我写的服务,详细可看 Android源码折腾(二)新增服务Bird

经过查看资料,我写的bird是系统服务,必须是系统应用才能访问服务,那么AndroidManifest.xml文件就要修改

4.修改AndroidManifest.xml 文件

必须要在配置文件的manifest标签中添加 android:sharedUserId="android.uid.system"属性,用于标记当前项目为系统应用。然后,我们需要对项目要使用的系统权限进行注册,以系统重启为例,我们需要注册 <uses-permission android:name="android.permission.REBOOT"/> 。

同时修改android.bp 文件,添加 certificate: "platform", 让apk打包用系统签名,不同签名app, android:sharedUserId不能一样,这里使用了android:sharedUserId="android.uid.system" 和其他系统app是一样的uid,那么只有他们签名一样才能打包。

代码语言:javascript
复制
android_app {
    name: "TestApp",
    certificate: "platform",
    srcs: ["**/*.java"],
    platform_apis: true,
}

再次make编译TestApp,打开模拟器,运行TestApp,点击hello。成功调用bird服务!

TestApp源码:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、新建项目
  • 二、项目拷贝源码中
    • 1.添加android.bp
      • 2.修改build/target/product/base.system.mk
        • 3.执行编译
          • 4.修改AndroidManifest.xml 文件
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档