Android系统开发
cntimothy
这个作者很懒,什么都没留下…
展开
-
recovery代码分析(六)
前面分析了move命令的实现,这里在简单的分析一下diff命令:static int PerformCommandDiff(CommandParameters ¶ms) { // <offset> <length> if (params.cpos + 1 >= params.tokens.size()) { LOG(ERROR) << "missing patch offset or length for " <原创 2020-06-01 17:27:01 · 636 阅读 · 0 评论 -
recovery代码分析(五)
前文提到过,在ota升级中,recovery会新启一个进程来执行update-binary执行实际的升级动作。而update-binary会执行update-script脚本。update-script脚本会调用block_image_update来进行安装。这里注意一下block_image_update调用时传入的参数:...原创 2020-06-01 16:45:54 · 1463 阅读 · 1 评论 -
recovery代码分析(四)
上一篇文章提到了,升级的实际动作是执行了升级包里的update-script。而这个update-script是由ota_from_target_files这个脚本生成的。ota_from_target_files这个脚本里面的WriteFullOTAPackage和WriteBlockIncrementalOTAPackage这两个函数分别生成全量包和增量包。下面就分析一下WriteBlockIncrementalOTAPackage这个函数。WriteBlockIncrementalOTAPackag原创 2020-05-27 15:39:23 · 911 阅读 · 0 评论 -
recovery代码分析(三)
前文分析了recovery的主要流程,在recovery的实际安装阶段,会创建一个新的进程,执行ota包里面的update-binary。recovery进程和update-binary进程通过管道进行通信。update-binary大致是从/bootable/recovery/updater编译出来的。下面分析一下update-binary的main函数。main()函数int main(int argc, char **argv) { // Timothy:前三行跟日志打印有关,初始化了日原创 2020-05-21 17:04:02 · 410 阅读 · 0 评论 -
recovery代码分析(二)
really_install_package()函数really_install_package()函数位于install.cpp。static int really_install_package(const std::string &path, bool *wipe_cache, bool needs_mount, std::vector<std::string> *log_buffer, int retry_c原创 2020-05-21 10:29:10 · 495 阅读 · 0 评论 -
recovery代码分析(一)
以下分析代码基于mtk 8167a的sdk,android版本是8.0.1。代码的分析直接看以Timothy开头的注释。main函数main()函数的位置是recovery.cpp。int main(int argc, char **argv) { // Timothy:初始化日志。因为recovery里面没有logcat,所以会将关键信息打印在屏幕上,日志写到文件里。 // We don't have logcat yet under recovery; so we'll print er原创 2020-05-20 17:45:57 · 966 阅读 · 0 评论 -
修改Recovery中的文字提示(二)
上一篇博文提到,如果把转换格式后的图片替换掉原来的图片,你会发现,显示的竟然是繁体中文。这到底是发生了什么?分析在上篇博文里面提到,在res_create_localized_alpha_surface()函数中,匹配到本地化信息之后,会打印日志。printf(" %20s: %s (%d x %d @ %d)\n", name, loc, w, h, y);那么,我们修改一下打印日志的位置,把匹配的过程都打印出来:int res_create_localized_alpha_surface原创 2020-05-20 10:37:50 · 807 阅读 · 0 评论 -
修改Recovery中的文字提示(一)
需求默认的升级界面如上图所示,我们要修改的是中间的“正在安装系统更新”这一文字提示。实现分析在Recovery中,这一段文字并不是文本,而是从图片资源文件中截取的。资源文件在bootable\recovery目录下的各种res-hdpi/res-mdpi……文件夹中。打开installing_text.png文件,可以看出这个文件是包含了各种语言的文字提示。在Recovery中,将根据传进来的本地化信息,从这个图片中截取正确的行,进行显示。那么,Recovery具体是怎么解析的呢?看下面的代码:原创 2020-05-19 17:44:15 · 1406 阅读 · 2 评论 -
Android8.0中实现APP禁用模式(三)
上篇文章最后留了一个问题:就是如果禁用app的时刻,被禁用的APP是打开的或者是最近应用视图正在显示,该怎么处理?我的解决方案是模拟一个HOME键的事件。这样,就能退出的状态,回到主页,同时给出提示,告知用户APP已被禁用。这里就有两个问题了:1、如何模拟HOME按键。2、如何判断哪个APP在前台。模拟按键我们知道,用adb可以模拟按键,那么,我们就从input命令的实现入手。input的...原创 2019-03-19 12:14:46 · 1269 阅读 · 0 评论 -
Android8.0中实现APP禁用模式(二)
上一篇文章说了,打开一个APP的方式有三种:1、从启动器点击图标启动;2、点击APP弹出的通知启动;3、点击多任务键,选择APP。现在就来实现在多任务菜单中实现APP的禁用。入口Framework中对各种按键的处理都是在PhoneWIndowManager中,这里会通过几个intercept函数,对Home、Back、媒体按键等进行拦截,不让这几个按键的键值传递给APP。我们在PhoneWin...原创 2019-03-16 17:49:33 · 1321 阅读 · 0 评论 -
Android8.0中实现APP禁用模式(一)
需求产品经理要求在Android平板中实现一个应用的禁用模式。当一个已安装的应用被设置为禁用的时候,在启动器中,APP图标灰色,且APP不能启动。需求分析打开一个APP的方式有三种:1、从启动器点击图标启动;2、点击APP弹出的通知启动;3、点击多任务键,选择APP。这三种启动方式中,第一个很容易实现禁用,只需要修改launcher就行,在图标的点击事件处理中增加一点逻辑即可。这里就分析一下...原创 2019-03-16 11:24:38 · 6230 阅读 · 2 评论 -
Android启动过程分析——init.c(二)
Part 4// ================================================== // Part 4union selinux_callback cb;cb.func_log = klog_write;selinux_set_callback(SELINUX_CB_LOG, cb);cb.func_audit = audit_callback;sel原创 2016-02-26 18:12:16 · 1483 阅读 · 0 评论 -
Android启动过程分析——init.c(一)
《Android框架揭秘》这本书是基于Android2.2源码的,但是手头上只有Android4.4的源码。这两个版本的启动过程基本一致,但是在具体的编码上,还是有一些区别的,下面,对照着这本书,分析一下4.4的init进程。原创 2016-02-26 16:08:15 · 2449 阅读 · 0 评论 -
《Android框架揭秘》读书笔记——JNI
形式 const jbyte* GetStringUTFChars(JNIEnv* env, jstring string, jboolean* usCopy) 说明 将Java字符串对象转换成UTF-8字符串(C字符串),并返回指针 参数 isCopy:当String对象中的祖父穿被转换成UTF-8字符串,被复制到内存,且指针被返回时,*isCopy设置为JNI_TRUE,否则设原创 2016-03-17 11:59:32 · 2985 阅读 · 0 评论 -
定制Android系统开发之十——优化系统服务中的回调
上一篇博文中,实现了简单的系统服务的回调。在这个简单化的实例中,回调有如下几个明显的缺点:只支持注册一个listener。注销的时候不能指定注销的listener。回调的时候可能会因为APP没有及时处理导致服务卡住。在这篇博文中,我们将逐步解决这几个问题。原创 2016-01-05 11:45:42 · 1263 阅读 · 0 评论 -
定制Android系统开发之九——在系统服务中实现回调
在上一篇博文里,我已经实现了从JNI到Java系统服务的回调。数据已经传回到java里了,那么下面的问题就是如何将数据传回到APP端。这篇博文将解决这个问题。原创 2016-01-04 16:28:40 · 2075 阅读 · 0 评论 -
定制Android系统开发之三——跟着我实现系统服务
在这篇博文中,我将一步一步建立一个SystemService。这个系统服务是用于控制收音机的,名字就叫做RadioManagerService。原创 2015-10-16 14:04:16 · 4486 阅读 · 6 评论 -
定制Android系统开发之五——ServiceFetcher
总觉得在上篇博文里面对在ContextImpl里面注册系统服务的过程讲的很乱,这里再写一点,说明一下注册的过程。原创 2015-10-20 10:30:21 · 2294 阅读 · 1 评论 -
定制Android系统开发之七——跟我实现系统服务的JNI调用
上一篇博文里分析了系统服务JNI调用的实现,这篇博文将一步步实现一个RadioManagerService里的JNI的调用。原创 2015-10-29 16:29:50 · 2111 阅读 · 0 评论 -
定制Android系统开发之六——系统服务JNI的实现分析
通过前面的几篇文章,已经将接口写到了XXXManagerService里面,下面的两篇博文将介绍怎么把接口的实现写到JNI里。原创 2015-10-29 16:31:21 · 2003 阅读 · 0 评论 -
定制Android系统开发之一——提供接口的方式
何为定制Android系统?就是在特定的硬件上,移植上Android操作系统,并修改原生Android系统以提供给定制的APP操作定制硬件的方法。所以,定制Android的主要工作有以下三部分:适配硬件;制作接口;定制APP;原创 2015-10-16 00:54:37 · 4243 阅读 · 0 评论 -
定制Android系统开发之二——系统服务
何为系统服务做Android APP开发的过程中,会经常需要调用类似于下面这样的函数:WifiManager mWifiManager = (WifiManager)getSystemService(Context.WIFI_MANAGER_SERVICE);这个WifiManagerService就是运行在Android系统后台,为应用提供接口支持的系统服务。这些系统服务在开机的过程中启动,运行于原创 2015-10-16 11:09:16 · 1627 阅读 · 0 评论 -
Thread、Handler与HandlerThread
今天在看Android源码的时候,看到了大量Handler的应用,和我以前开发APP的时候使用Handler的方法不太一样,所以花了一些时间来研究Handler。这里简单的记录一下。原创 2015-10-14 23:52:03 · 1672 阅读 · 3 评论 -
Android JNI使用总结(二)
上一篇里面主要是JNI中一些函数的介绍,这篇博客就举个例子来说明这些函数的使用方法。项目介绍这个例子来源于我实际的项目。原创 2015-10-13 23:53:20 · 967 阅读 · 0 评论 -
Android JNI使用总结(一)
Android JNI使用总结最近在做的一个项目需要在i.MX6上和MCU通过uart进行通讯。通讯算是一个JNI的典型应用了,在实现的过程中,遇到了不少问题,这里总结一下。原创 2015-10-13 23:05:54 · 1375 阅读 · 0 评论 -
在Android4.2中实现bluetooth A2dp Sink(二)——移植Android5.0蓝牙协议栈
移植的思路分析原创 2015-01-24 14:14:16 · 6823 阅读 · 11 评论 -
在Android4.2中实现bluetooth A2dp Sink(一)——移植Android5.0蓝牙协议栈
一直以来,Android对于蓝牙的支持都很混乱,简直可以说是一坨shit。各个版本的协议栈都不一样,最早用的是bluez,进入4.x时代之后,换成了谷歌自己的bluedroid。换就换吧,至少等做完了再用吧,结果4.2、4.3、4.4的bluedroid全都不一样。这就对我等非专业蓝牙开发人员开发蓝牙制造了巨大的麻烦。 好了,吐槽到此为止,该说正事了。因为公司在做智能家居项目,需要在An原创 2015-01-24 13:28:53 · 7270 阅读 · 1 评论 -
定制Android系统开发之八——实现从JNI到Java的回调
前面已经实现了APP->xxxManager->xxxManagerService->jni的函数调用,这篇博文就来实现jni->xxxManagerService的回调。原创 2015-11-02 16:54:11 · 2530 阅读 · 0 评论 -
定制Android系统开发之四——系统服务实现的分析
在上一篇博文中,我给出了实现系统服务的步骤,这篇博文则将分析一下,为什么这样的实现方式能够实现客户端/服务器模式。原创 2015-10-16 17:19:05 · 2022 阅读 · 0 评论