- 博客(51)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
原创 android 11添加系统api供app使用
实现要求:添加系统api到sdk,公开给未签名app使用1.将代码添加到 frameworks/base/core/java 目录下,创建自己的包名,这个路径下可以自动识别,更新到current.txt,不用改编译规则比如:frameworks/base/core/java/qcd/app/Test.java(注意,包名不要以com开头,不要问为什么)2.设置基线检查,忽略自定义包名修改: frameworks\base\StubLibraries.bppackages_to document
2024-01-12 10:14:46
938
原创 Android Persistent自启机制
当应用启动完毕后就会调用到ActivityThread.java内的attach方法,方法内调用了AMS的attachApplication方法,之后再到attachApplicationLocked,该方法内部就会将应用移除mPersistentStartingProcesses列表,表明应用启动完毕,同时为应用并注册一个死亡监听器AppDeathRecipient,用于应用被异常杀死后的重启.之后在系统的启动过程中就会根据设置的这个persistent控制应用的启动。
2024-01-12 09:24:33
2963
原创 Android jar包编译及集成
使用方式如上,如果依赖到其他jar包,则是用static_libs:[HelloTest,]添加依赖编译,如果需要预加载到虚拟机,则需要配置了PRODUCT_BOOT_JARS添加到bootcalssloader路径当中。如果需要打包到systemimg,则需要将此jar包添加到PRODUCT_PACKAGES,此编译指令将jar包添加进了system分区,但是没有预加载,PRODUCT_BOOT_JARS指令会将jar包预加载到虚拟机中供客户端使用。Vendor分区:芯片上上分区,提供核心功能和服务。
2024-01-12 09:17:00
1295
原创 关于Android framework jar包编译的几个问题
定义接口,集成在framework.jar参与编译,具体实现在services.jar,实现接口,处理具体代码逻辑,比如InputManagerInternal,ActivityManagerInternal。BootClassLoader 用来加载BOOTCLASSPATH下jar (framework.jar在这个路径)问题1:framework.jar里的类,为什么不能直接import services.jar里的类?问题3:目前framework.jar是如何调用services.jar的代码的?
2024-01-12 09:06:37
756
原创 Android 编译系统AIDL模块couldn‘t find import for class错误
例如,定义 com.example.IFoo 的文件 IFoo.aidl 可能位于文件夹层次结构 Something/something-else/com/example/IFoo.aidl 中。要从另一个构建目标(例如另一个二进制文件或 java)的 .aidl 文件生成代码,只需将 .aidl 文件的相对路径添加到 .aidl 文件即可。请记住,导入 AIDL 的工作方式是相同的,即使对于其他目录层次结构中的代码也是如此:将相对于签出根的包含根路径添加到。您的 Android.mk 中。
2023-11-27 10:35:07
1325
原创 android 添加jar包 编译错误
framework.jar是加在了BOOTCLASSPATH路径中(先加载),但是新添加的jar包却依赖了SYSTEMSERVERCLASSPATH中的类,所以在编译framework.jar时,在BOOTCLASSPATH路径中找不到services.jar中的类,有可能SYSTEMSERVERCLASSPATH中的类还未加载,导致编译报错,这种情况是无法编译的。Android类加载路径有两个BOOTCLASSPATH,SYSTEMSERVERCLASSPATH,BOOTCLASSPATH西安加载。
2023-11-13 13:59:03
603
原创 Android studio 调整jar包顺序
第四步:app.iml 中,将 classes.jar的orderEntry放在最前面,over。第三步:project目录下build.gradle 中添加。第二步:app 目录下build.gradle 中添加。
2023-09-05 11:44:26
1383
原创 malloc debug抓日志
malloc debug正常抓日志:1.adb root2.setenforce 03.cd /data/local/4.chmod 777 tmp5.setprop libc.debug.malloc 16.setprop libc.debug.malloc.program 进程名7.setprop libc.debug.malloc.options "backtrace leak_track"8.kill -9 进程号,重启进程9.复现问题10.kill -47 进程号...
2022-06-13 09:30:02
1129
原创 build.gradle文件
// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript { repositories { maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } maven { url 'http://maven.aliyun.com.
2022-02-15 08:46:22
364
原创 Canvas绘制layout.xml布局
try { mCanvas = mSurfaceHolder.lockCanvas(); if (mCanvas != null) { LayoutInflater inflater = LayoutInflater.from(getContext()); View v = inflater.inflate(R.layout.clock, null, false); ...
2021-12-22 09:35:57
1172
原创 【无标题】Android 添加layer图层
@@ -2036,6 +2036,39 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree } else if (mLetterbox != null) { mLetterbox.hide(); }+ //adddddddd+ android.view.Surface mTestSu..
2021-12-20 17:26:27
1927
转载 android9duochuangkoubiji
一、概述:AndroidQ上面原生的多窗口功能支持四种模式:全屏、分屏、画中画、FreeForm模式。多窗口主要涉及ActivityManagerService、WindowManagerService、Input三个模块。///二、原理框架Android原生多窗口是多Stack方案,即存在多个ActivityStack。ActivityStack是一个抽象的栈,每个栈都有自己的屏...
2019-10-16 20:44:20
802
原创 笔记:系统的上下文切换情况
过多的上下文切换,会把 CPU 时间消耗在寄存器、内核栈以及虚 拟内存等数据的保存和恢复上,缩短进程真正运行的时间,成了系统性能大幅下降的一个 元凶。过多的上下文切换,会把 CPU 时间消耗在寄存器、内核栈以及虚 拟内存等数据的保存和恢复上,缩短进程真正运行的时间,成了系统性能大幅下降的一个 元凶。vmstat 是一个常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU...
2019-09-09 23:34:26
721
原创 笔记:cpu上下文,上下文切换
CPU 上下文:CPU 寄存器,是 CPU 内置的容量小、但速度极快的内存。而程序计数器,则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。它们都是 CPU 在运行任何任务前,必须的依赖环境。CPU 上下文切换:就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加 载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数...
2019-09-08 22:24:30
172
转载 android代码调试
关于android系统代码调试http://weishu.me/2016/05/30/how-to-debug-android-framework/https://blog.youkuaiyun.com/murphykwu/article/details/52117907androidStudio创建java工程https://blog.youkuaiyun.com/glydxm/article/details/5131...
2018-06-01 21:55:27
352
原创 Binder笔记
Binder介绍 Linux内核的基本知识: 1.进程隔离/虚拟地址空间 在操作系统中为了保护某些进程互不干扰,就设计了一个叫进程隔离的技术,而这个技术就是为了避免进程A可以操作进程B的数据的情况下所实现的。进程的隔离实现,它用到了虚拟地址空间,进程A的虚拟地址空间和进程B的虚拟地址空间其实是不同的,这样就防止了进程A的数据可以写到进程B里面。操作系统当中,不同进
2018-01-14 20:16:05
312
原创 子线程handler与handlerThread
一般情况下在子线程中创建Handler如下: Handler handler; //创建全局变量 Thread mThread = new Thread(new Runnable() { public void run() { Looper.prepare(); handler = new
2017-06-30 12:49:03
540
原创 c语言中静态库动态库的创建与使用
在c程序中存在两种库文件,分别为静态库文件与动态库文件也叫共享库文件,系统的库文件存放路径为 usr/lib目录下:静态库文件就是一些.o目标文件的集合,以.a结尾。静态库在程序链接的时候使用,连接器会将程序中使用到的函数的代码从库文件拷贝到可执行文件中,一旦链接完成,在程序执行的时候就不需要静态库了。静态库的创建:首先看一下源文件fun.c#include int
2017-06-29 15:07:06
2649
原创 linux下实现jni的方式
linux下实现jni的方式用JNI实现一个经典的“Hello World”程序。该程序在Java中通过JNI调用c函数实现“Hello World”的输出。创建该程序分为以下步骤:1、创建一个Java程序(HelloWorld.java)定义原生的c/c++函数。 创建java文件,声明native方法2、用javac编译HelloWorld.java生成HelloWorld.cl
2017-06-02 17:12:26
596
原创 笔记:关于adb push不生效
Android编译是否生成odex的设置默认编译odex版本,如果需要非odex版本,请将device/huawei/k3v2_s10/BoardConfig.mk如下两个变量的值修改为:DISABLE_DEXPREOPT := trueWITH_DEXPREOPT := false其它说明A. device/hisi/k3v2oem1/下面的配置文件不再使用,对应的配置文
2017-05-02 23:01:20
7520
原创 笔记 intent隐式启动的两个注意事项
隐式启动activity:intent进行匹配时需要3个属性, action category 和data,通常情况下首先在清单文件里注册 action 和 categ
2017-04-25 10:48:19
1442
原创 android 7.0 Settings 省电模式
Settings 省电模式:开启省电方式有两种:第一种 自动开启,点击Turn on automatically,弹出下拉选项,选择never, at 5% battery, at 15% battery第二种 手动开启,点击SwitchBar开关即可设置先说第一种:关键字段:/packages/apps/Settings/res/values/strings.xml
2017-04-24 13:01:10
6268
1
原创 android系统资源添加
android添加系统资源源文件路径: /frameworks/base/core/res/res编译后路径: /out/target/product/项目名称/system/framework/framework-res.apkR.Java文件: /out/target/common/R/com/android/internal/R.Java资源的添加:如在framework-res
2017-04-21 15:00:12
2456
原创 java 泛型介绍
1.泛型的基本概念:泛型是JDK 1.5的一项新特性,它的本质是参数化类型(Parameterized Type)的应用,也就是说所操作的数据类型被指定为一个参数,在用到的时候在指定具体的类型。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。2.泛型中标记符的含义: E - Element (在集合中使用,因为集合中存放的是元素) T - Type(Ja
2017-04-20 16:24:15
508
原创 Android Settings 快速搜索
Settings 之 SearchIndexablesProvider首先需要在清单文件中注册action为"android.content.action.SEARCH_INDEXABLES_PROVIDER"的provider,如下: <provider android:name=".search.SettingsSearchIndexablesProvid
2017-04-20 16:15:47
3838
转载 关于ActivityThread和ApplicationThread的解析
文章仅仅用于个人的学习记录,基本上内容都是网上各中资料,此处摘录过来以自己的理解学习方式记录一下。 ActivityThread和ApplicationThread的理解在你阅读源代码尤其和进程启动,service、activity启动等相关的代码时,就能发现其重要性了。1、ActivityThread. 在Android中它就代表了And
2017-04-06 23:52:39
11274
1
转载 Android消息机制源码分析
Android源码分析之--消息机制源码分析前言:为什么要学习Android源码?很多读者,尤其是初学者特别抗拒去看源码,这里我说明一下为什么要
2017-04-06 23:46:46
680
原创 Java反射机制常用方法
Java反射机制常用方法:1. 得到某个对象的属性 public Object getProperty(Object owner, String fieldName) throws Exception { Class ownerClass = owner.getClass(); Field field = ownerClas
2017-04-01 15:26:03
806
原创 android依赖注入注解的实现
android依赖注入,注解功能,本demo实现view注入,点击事件注入.首先实现两个注解类:@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface InjectView { //只接收一个int类型的值,用于表示view的id public @IdRes int valu
2017-04-01 15:06:54
2595
1
转载 优快云如何转载别人文章
1、找到要转载的文章,用chrome浏览器打开,右键选择审查元素2、在chrome中下方的框里找到对应的内容,html脚本中找到对应的节点,选中节点,网页上被选中内容会被高亮显示,然后右键菜单选中 Copy as HTML3、进入个人”管理博客”主界面,选择”写新文章“,编辑界面的地方选择工具条上的源代码,将chrome中复制的内容贴进来
2017-04-01 00:29:59
511
原创 笔记: Field 与 Method
java.lang.reflect.FieldAPI解释:Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。它的使用是从反射开始的,通常是通过Class对象来获取Field实例: Class.getFields(), Class.getField(String), Class.getDeclaredFields(), Clas
2017-03-31 17:02:37
1895
原创 性能优化—内存泄漏
两个概念:内存泄漏:可以解释为,内存不在GC掌控之内。OOM: 即out of memory内存溢出(当应用占用的heap资源超过了Dalvik虚拟机分配的内存就会内存溢出),内存泄漏多了就会导致内存溢出。1.什么是内存泄漏? 当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而导致对象不能被回收。这种导致了本该被回收的对象不能被回收而停留
2017-03-24 01:36:21
605
1
原创 DevicePolicyManager使用
1.在清单文件注册receiver <receiver android:name=".MyAdmin" android:permission="android.permission.BIND_DEVICE_ADMIN"> //这个权限必须要申请 <meta-data android:name="android.app.device_admin"
2017-03-23 14:46:43
2243
原创 android 7.0 Downloadprovider 下载流程
1.Downloadprovider 源码路径 Download的源码编译分为两个部分,一个是DownloadProvider.apk, 一个是DownloadProviderUi.apk.这两个apk的源码分别位于 packages/providers/DownloadProvider/ui/src packages/providers/DownloadProvider/src 其中,D
2017-03-22 13:58:50
5416
1
原创 判断或者获取栈顶Activity
private boolean isTopRunningTask(Context mContext, String taskName) { if(TextUtils.isEmpty(taskName)){ return false; } ActivityManager am = (ActivityManager) mContext.getSystemServ
2017-03-22 09:32:40
874
原创 插件化-apk动态加载
加载assets目录下的sdcard.apk中的资源文件package com.example.plugin_test;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.lang.reflect
2017-03-21 16:54:55
621
android layerstack
2021-06-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人