首页 > 其他分享 >Android 11 引入了“包可见机制”

Android 11 引入了“包可见机制”

时间:2023-03-01 10:58:06浏览次数:53  
标签:11 framework jar 编译 adb push 引入 Android com

需求:
用一个应用去拉起另一个应用的服务!

 Intent btService = new Intent();
  btService.setComponent(new ComponentName("com.xyauto.textapp", "com.xyauto.textapp.demo1.TextService"));
  btService.setPackage("com.xyauto.textapp");
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
          startForegroundService(btService);
     }

bug描述:
发现服务没有被拉起,查看bug日志

17414: 03-01 09:49:39.634  1435  3947 W ActivityManager: Unable to start service Intent { pkg=com.xyauto.textapp cmp=com.xyauto.textapp/.demo1.TextService } U=0: not found

百度找到的解决方案

其实应该自己分析的,第一步去寻找源码中打印这个日志的地方,然后分析!

./services/core/java/com/android/server/am/ActiveServices.java:2588:Slog.w(TAG_SERVICE, "Unable to start service " + service + " U=" + us ......

解决方案两种

<queries>
    //需要被拉起服务的报名
    <package android:name="com.xygala.textapp" />
</queries>

//获取所有包可见得权限
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
        tools:ignore="QueryAllPackagesPermission" />

Linux -->Every thing is a file

驱动程序运行于内核空间,用户空间的app通过文件系统中/dev/目录下的文件来和它交互,
熟悉的打开文件的操作流程--- >open()-->read()--->write()-->ioctl()-->close()

一 : 编译framework资源文件
如果修改android framework资源文件,需要先编译资源文件,然后再编译framework才可以正常引用,
进入项目目录 cd work/source/frameworks/base/core/res/ 执行mm 编译 framework-res.apk(原生或高通)
编译完后com.android.internal.R中会生成资源的引用。

在目录 work/source/frameworks/base/ 下执行mm 编译 framework.jar (原生或高通)

如果 frameworks/base/services 下有修改,则也要编译,在目录 work/source/frameworks/base/services/java/ 执行mm 编译services.jar

二 : 验证修改后的效果
adb root
adb remount
adb push framework-res.apk /system/framework/
adb push framework.jar /system/framework/
adb push secondary_framework.jar /system/framework/ (如果存在secondary_framework.jar,需要push)
adb push services.jar /system/framework/ (如果service有修改,需要push)

adb reboot 重启设备。
adb push可执行文件制作教程,有兴趣的朋友可以参考adb push可执行文件制作教程

三 : 总结
在开发过程中,尤其是framework相关开发时,有时候需要重新编译资源文件.编译顺序和注意事项如下(均在源码根目录):

资源文件位置:frameworks/base/core/res,编译后生成的文件:framework-res.apk 另外com.android.internal.R会更新这个R.java所在目录/out/target/common/R/com/android/internal.
编译资源后,必须重新编译framework.jar.
如果在frameworks/base/core/res执行mm时并不重新编译,请使用toutch filename(文件名)或者mm -B
资源文件要小写.
如果没有必要,尽可能不要编译资源文件,可以用其他方式使用资源,可用adb push到指定的文件夹进行引用。

标签:11,framework,jar,编译,adb,push,引入,Android,com
From: https://www.cnblogs.com/kato-T/p/17167305.html

相关文章

  • .NET 7 和 C# 11 的 7 大自定义扩展方法
    .NET7和C#11的7大自定义扩展方法原创2023-01-1311:59·启辰8 介绍自从我开始了解扩展方法以来,我不断地发现新的可能性,让我的编码生活更轻松。扩展方法是S......
  • MASA MAUI Plugin (九)Android相册多选照片(使用Android Jetpack套件库)
    背景MAUI的出现,赋予了广大.Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并......
  • 编译PHP 7.3扩展引入自定义的C++库
    这里以mac为例,linux环境也是类似的。这里只是粗略的修改及编译过程,不会有太多详细过程。在https://www.php.net/downloads或者https://github.com/php/php-src/releases下......
  • 如何创建一个浏览器版的`Window11`
    如何创建一个浏览器版的Window11我们接下来将创建一个在浏览器运行的Window11,可以先看看效果图这是基于Windows11inReact修改的功能,我们接下来就将使用Windows11i......
  • 尚硅谷_每日一考_88+111+134+152
    1111.switch后面的表达式可以是哪些数据类型的。byte、short、char、int、枚举类型变量、String类型2.switch-case、if-else、三元运算符使用场景的理解。都表示分支,优......
  • 分析总结一下所有有关打印题目的套路和思路:pat乙级:1109 擅长C, 1008元素循环右移,1050
    分析:首先你要明白第一件事:所有要打印东西的题目打印都是从第一行到最后一行,从第一列到最后一列,你是没办法跳着打印的。可以看看其他几个打印题目1008元素循环右移,1050螺......
  • Android包体积优化-R文件内联
    最近在公司项目中应用到了R文件内联来进行包体积优化,故记录一下实践的一些经验R文件内部包含了Android中所使用到的所有资源的唯一标识符,也就是id,从源代码形式来看就是在......
  • 2月27日Android开发学习
    App工程目录结构App工程分为两个层次,第一个层次是项目,另一个层次是模块。模块依附于项目,每个项目至少有一个模块。一般而言的“编译运行App”,指的是运行某一模块,而非运行......
  • AD52060兼容替代TPA3110,AD52050兼容替代TPA3136
    AD52060是一款高效立体声D类功放,它的供电范围较宽(8V~26V),能方便地与各型电源板,包括LED液晶电源板、电源高压二合一板等相连接;输出功率较大,在供电为24V的状态下,输出功率可......
  • Win11右键“更多选项”默认修改
    系统更新到Win11后发现在文件资源管理器中右键时,有一些选项需要再次点击“更多选项”才能显示。为了使用更加方便可以将其调整为默认情况下显示所有的可选项。打开注册表......