Android系统源码,在c++代码中加堆栈调用日志输出调试功能

 分类:Android, C++, Java, Others 阅读 (295)  Android系统源码,在c++代码中加堆栈调用日志输出调试功能已关闭评论
5月 122020
 

本文基本Android8.1系统源码

stack.log的第一个参数是LOG_TAG,第二个是固定的ANDROID_LOG_DEBUG

 Posted by on 2020-05-12

关于Zygote Server的一些问题

 分类:Android, Java 阅读 (194)  关于Zygote Server的一些问题已关闭评论
5月 112020
 
既然Zygote Server是使用网络通讯,为什么普通应用不能和它通讯?

笔者本来以为zygote是通过127.0.0.1这种方式创建的server,所以会有此疑问。经过研究发现,zygote是通过文件建立的socket server(具体文件名/dev/socket/zygote),并且zygote是以root权限运行的,所以它生成的socket文件普通应用是无法进行通讯的。

Android8.1系统多国语言包删减

 分类:Android, Java 阅读 (525)  Android8.1系统多国语言包删减已关闭评论
5月 072020
 
删除framework层不使用语言配置文件

删除目录frameworks/base/core/res/res/下面的除了简体中文zh-rCN、繁体中文zh-rTW、zh-rHK和英文en-rXX之外的相关语言资源文件

删除前system.img文件为1.2G左右

删除后system.img文件为1.1G左右

 

删除设置应用中的不使用的语言选择列表

在frameworks/base/core/res/res/values/locale_config.xml中删除不使用的语言即可

 Posted by on 2020-05-07

Ubuntu18.04.4编译Nxp android_o8.1.0_2.1.0-auto-GA版本安卓系统源码

 分类:Android, Java 阅读 (281)  Ubuntu18.04.4编译Nxp android_o8.1.0_2.1.0-auto-GA版本安卓系统源码已关闭评论
4月 132020
 

一、环境准备

Ubuntu18.04.4,不能使用Ubuntu16会有很多依赖软件版本太低

硬盘200G,内存4G+,交换分区(swap)4G+(可装完系统后添加,见后面错误处理部分)

二、下载源码

官方源码下载脚本链接:https://www.nxp.com/webapp/Download?colCode=O8.1.0_2.1.0_AUTO_GA_SOURCE&appType=license&location=null

三、安装编译时需要的第三方库

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

sudo apt install uuid uuid-dev zlib1g-dev liblz-dev liblzo2-2 liblzo2-dev lzop git-core curl u-boot-tools mtd-utils android-tools-fsutils device-tree-compiler gdisk liblz4-tool m4 libz-dev

安装open-jdk-8

sudo add-apt-repository ppa:openjdk-r/ppa

sudo apt-get update

sudo apt-get install openjdk-8-jdk

安装gcc-arm-none-eabi

sudo apt-get install gcc-arm-none-eabi

安装完这一项后,在~/.bashrc中最后一行添加脚本export ARMGCC_DIR=/usr/

然后执行source ~/.bashrc

安装cmake,需要3.13.0版本以上,安装步骤如下,其中./bootstrap那一步可以不用加后面的–qt-gui参数
https://blog.csdn.net/huigougou/article/details/84326907

四、开始编译

  然后进入到Android源码目录,假设源码在用户根目录的aosp目录中:

cd ~/aosp

  然后初始化编译环境,使用下面的命令:

source build/envsetup.sh

  然后选择要编译的目标版本,先输入lunch命令

lunch

  然后在显示的列表中选择你的目标版本,输入相应的数字,按回车即可

  然后使用make开始编译,可以使用-j参数增加编译的线程以提高速度,线程数量为cpu核心数的2倍比较合适,比如你的cpu是4核的使用

make -j8

  就可以了

五、遇到的问题

1. 错误:flex-2.5.39: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))’ failed.
Aborted (core dumped)

解决办法:
This will do the trick:

export LC_ALL=C

Add it to your bashrc file or equivalent.
参考链接:https://stackoverflow.com/questions/49955137/error-when-build-lineageos-make-ninja-wrapper-error-1
https://www.jianshu.com/p/2beae17c9b12

2、错误2:
JackServer提示out of memory

解决方案:
修改jack server内存
步骤:
打开./prebuilts/sdk/tools/jack-admin
找到下面这一行
JACK_SERVER_VM_ARGUMENTS=”${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8}”
修改为
JACK_SERVER_VM_ARGUMENTS=”${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096M}”
保存jack-admin文件
在命令行执行
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
重启jack server
然后重新编译

Android Studio报Cannot find a version of ‘com.android.support:support-annotations’错误

 分类:Android, Java 阅读 (481)  Android Studio报Cannot find a version of ‘com.android.support:support-annotations’错误已关闭评论
4月 122020
 

生成签名apk时,Android Studio报如下错误:

解决办法:

在app/build.gradle中加入以下依赖

 

 Posted by on 2020-04-12

Android Studio. CMake was unable to find a build program corresponding to “Ninja”

 分类:Android, Java 阅读 (773)  Android Studio. CMake was unable to find a build program corresponding to “Ninja”已关闭评论
4月 122020
 

编译项目时出现下面的错误:

CMake Error: CMake was unable to find a build program corresponding to “Ninja”.  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.

解决办法:

把项目的build.gradle中的buildscript下面dependencies里的gradle的版本升级以下就行了

原来是:

 Posted by on 2020-04-12

Android系统源码中SeLinux的配置

 分类:Android, Java 阅读 (574)  Android系统源码中SeLinux的配置已关闭评论
3月 312020
 
模块中定义的sepolicy策略文件目录如下加入到系统编译中:

在BoardConfig.mk中找BOARD_SEPOLICY_DIRS,将你的sepolicy目录加到这个变量中,如下所示:

 
如何定义域?

在/system/sepolicy/public/attributes文件中输入如下的行来定义

 
如何定义某个目录或者应用文件的安全上下文?

首先在/system/sepolicy/private/file_contexts中定义如下:

然后创建my_app.te的文件来定义具体的规则:

 

根据logcat中的avc denied的log生成合适的seLinux规则。

我们可以在logcat中看到类似如下的日志:

我们可以通过audit2allow工具把上面的log转换成合适的规则,配置在策略文件中,如果没有安装过这个工具先安装工具,如下:

将相关的log保存到一个文件中,如avclog.txt,然后执行下面的命令来生成规则:

 

Android系统中的locksettings命令

 分类:Android, Android, Java, Operating System 阅读 (689)  Android系统中的locksettings命令已关闭评论
3月 202020
 

本文基于Android8.1系统

进入Android系统的命令行控制台,可以通过locksettings命令来设置锁屏的一些选项,比如开启或者禁止锁屏,设置密码等

命令行的帮助如下:

命令举例如下:

允许锁屏

locksettings set-disabled DISABLED

默认不锁屏

locksettings set-disabled true

这个命令对应的系统源码在下面这个文件中:

 

 Posted by on 2020-03-20

PinnerService配置

 分类:Android, Java 阅读 (550)  PinnerService配置已关闭评论
3月 192020
 

PinnerService是用于锁定某些模块在内存中,避免这些模块被移出\移入内存从而提高程序的运行效率

具体可以参考https://source.android.google.cn/devices/tech/debug/jank_jitter这个页面中的相关介绍

PinnerService是在Android7.0中才增加的

在Android8.1系统源码中如何配置PinnerService?

打开文件frameworks/base/core/res/res/values/config.xml,增加如下配置:

具体哪些文件需要配置在PinnerService中?

 

 

adb shell dumpsys可以dump的服务

 分类:Android, Android, Java, Operating System 阅读 (499)  adb shell dumpsys可以dump的服务已关闭评论
3月 122020
 

   adb shell dumpsys显示的结果比较长,有的时候我们只想看某一个服务的dump信息,在后面加上那个服务的名字就可以了。我们执行完adb shell dumpsys后,最顶部显示的是当前运行的服务列表,这个列表就是可以细项输出的每个服务名称的列表。

  比如:adb shell dumpsys alarm输出的就只有SurfaceFlinger服务的输出信息。

  对于某些服务,还能指定更小的分类,比如adb shell dumpsys activity还有更细的输出adb shell dumpsys activity broadcasts,这个我们通过adb shell dumpsys activity -h打印帮助信息就能看到子分类的参数说明了。

  adb shell dumpsys生成的列表