bcoder

Android8.1系统中启用bootchart

 分类:Android, Android, Java, Operating System 阅读 (180)  Android8.1系统中启用bootchart已关闭评论
3月 072020
 

bootchart是用于记录开机时进程启动时间的工具

默认情况下是没有启用的,在init.rc中是有启动的,看如下代码:

但是,查看了一下bootchart的源码(在system/core/init/bootchart.cpp中),它启动要判断另外一个条件,代码如下:

也就是说检查/data/bootchart/enabled文件是否存在(不管文件是不是有内容),如果存在就启用bootchart,这样就好办了,我们在/data/bootchart中随便新建一个名字enabled的空文件就好了。

修改完后再重新启动安卓系统发现/data/bootchart目录下有了下面几个文件:

header

proc_diskstats.log

proc_ps.log

proc_stat.log

接下来就可以用其他工具根据这些log生成图片了,我使用的是linux下的pybootchartgui工具

 

 Posted by on 2020-03-07

pybootchartgui使用说明

 分类:Android, Linux, Operating System 阅读 (140)  pybootchartgui使用说明已关闭评论
3月 072020
 

pybootchartgui是用于生成linux或者android系统bootchart开机时间图表的工具

使用方式:

pybootchartgui bootchart_log_path

bootchart_log_path是bootchart生成的log的路径

其他参数说明:

帮助列表:

 

 Posted by on 2020-03-07

Android模拟器部分参数说明

 分类:Android, Android, Java, Operating System 阅读 (114)  Android模拟器部分参数说明已关闭评论
3月 052020
 

模拟器版本Android emulator version 26.1.3.0 (build_id 4240222) 

本文所述都是基于android8.1系统源码编译后的模拟器程序,不是android studio中的模拟器

部分参数说明:

-screen 触屏模式,可以为如下参数:touch, multi-touch, or no-touch

-accel 加速模式,可以为如下参数:on, off, auto

-writable-system 执行adb remount后system和vender分区可写

-skin 皮肤名称,如果是安卓系统源码,皮肤在development/tools/emulator/skins目录下

-wipe-data 清除用户数据

-shell 看着是可以显示系统的log了,其他区别不清楚

-cores 模拟器的cpu核心数

-gpu 设置硬件OpenGLES模拟模式,可选参数:on, off, auto

-memory 设置模拟器的物理内存大小,单位MB,有的时候设置比较大的值会导致模拟器无法启动

-show-kernel 显示内核消息

-no-boot-anim 禁止开机动画,加速模拟器启动速度,有的时候加上模拟器启动不了

-tcpdump <file> 将网络包抓到某个文件

-bootchart 允许-bootcharting,具体可以百度搜索一下bootchart

-selinux <disabled|permissive> 是否开启selinux

-dpi-device 设置设备的dpi

参数帮助列表:

其他的配置文件

在生成的镜像目录中还有一个config.ini,也可以进行一些配置,具体参考自己机器上的文件进行配置

在我的机器上是out/target/product/generic_x86_64/config.ini这个文件

 Posted by on 2020-03-05

Android Studio中gradle实现多维度打包

 分类:Android, Java 阅读 (185)  Android Studio中gradle实现多维度打包已关闭评论
1月 132020
 

举个不太恰当的例子,比如我们需要生成针对友盟统计的渠道为官网、应用宝、百度应用市场三个渠道各自对应的开发环境和测试环境的应用包。

那么,我们首先在AndroidManifest.xml中定义相关的点位符

友盟统计渠道点位符:

开发环境占位符:

在项目的build.gradle的android节点下定义flavorDimensions,如下:

然后我们定义productFlavors

获取当前apk占位符的值

我们以app_enviornment这个占位符为例,获取这个点位符的值后,确定连接开发服务器还是测试服务器

新建项目自定义的Application类(如果不明白,请百度一下这步如何操作),本例代码如下:

如上,获取到了占位符app_enviornment的值,根据AppEnviornment就可以做其他处理了

这个操作也不是必须放在自定义的Application类中,放在Activity中也可以

自动多版本apk的打包

在项目的build.gradle文件的android节点中增加如下代码:

  1. ${variant.versionName} – 版本名称
  2. ${variant.versionCode} – 版本编码
  3. ${variant.productFlavors[0].name} – 第一维度的名称(官网、应用宝等)
  4. ${variant.productFlavors[1].name}- 第二维度的名称(开发环境、测试环境等)

生成的apk截图如下:

Android Studio中如何指定要调试的版本

在studio左下角,找到Build Variants工具栏,在Active Build Variant中选择要调试的那个版本

代码下载

https://github.com/wintergoes/DimensionTestApp

 Posted by on 2020-01-13

Android8.1系统源码集成三方应用三方apk的方法

 分类:Android, Java 阅读 (196)  Android8.1系统源码集成三方应用三方apk的方法已关闭评论
12月 242019
 

首先在源码目录下建一个apks的目录,然后在apks下面建应用的目录,比如music

将my_music.apk拷贝到music目录下

在music目录下新建Android.mk文件,编译Android.mk文件,输入以下内容:

最后记得找到相应的包含PRODUCT_PACKAGES的mk文件,并在PRODUCT_PACKAGES属性中加入新建的LOCAL_MODULE,示例如下:

然后执行make编译

 Posted by on 2019-12-24

使用Android Studio调试系统应用的方法

 分类:Android, Java 阅读 (191)  使用Android Studio调试系统应用的方法已关闭评论
12月 202019
 

本文不适用于正常的手机应用开发,本文是在定制的安卓系统上开发

一、如何使应用变成系统应用

在AndroidManifest.xml中,根节点manifest中增加如下属性:

二、问题

如果直接run,则程序无法安装,会提示INSTALL_FAILED_SHARED_USER_INCOMPATIBLE错误

三、解决办法,使用keytool-importkeypair

见下面的链接:

https://www.jianshu.com/p/407c3754e490

keytool-importkeypair下载地址:

https://github.com/getfatday/keytool-importkeypair

 

 Posted by on 2019-12-20

Android8.1不使用jack编译的方法

 分类:Android, Java 阅读 (184)  Android8.1不使用jack编译的方法已关闭评论
12月 202019
 
一、为什么使用jack?
  1. 支持增量编译,编译速度快
二、全局禁用

禁止整个系统编译使用jack编译,在/build/core/combo/javac.mk中将

修改为false,即

三、单个模块禁用

在模块的Android.mk中增加如下设置

LOCAL_JACK_ENABLED := disabled

四、jack的三种模式

jack有三种模式:full、incremental、disabled

full – 全量编译

incremental – 增量编译,在frameworks/base下的Android.mk可看到frameworks是采用增量编译的

disabled – 禁用

 Posted by on 2019-12-20

Android8.1开发系统服务步骤

 分类:Android, Java 阅读 (125)  Android8.1开发系统服务步骤已关闭评论
12月 192019
 

1.在frameworks/base/core/java/下新建aidl文件的目录结构,比如你的服务所在包名为com.zht.car,则新建如下层级目录com/zht/car

2.新建aidl文件,如IBeidou.aidl

3.输入IBeidou.aidl的内容

4.在frameworks/base/Android.mk中的LOCAL_SRC_FILES中增加新增加aidl路径

5.在build/core/tasks/check_boot_jars/package_whitelist.txt中增加包的白名单,如下:com\.zht\.car\..*

6.执行make update-api

7.执行make检查前边的步骤有没有问题

5.在frameworks/base/services/core/java/com/android/server/中,根据服务的名称新建目录

 Posted by on 2019-12-19

Android8.1中SeLinux使用

 分类:Android, Java 阅读 (218)  Android8.1中SeLinux使用已关闭评论
12月 172019
 
查看SeLinux是否启用,输入命令:

getenforce

如果返回:Enforcing – 正在启用,Permissive – 未启用但会提示

临时设置为不启用(需要root权限):

setenforce 0

查看进程的SeLinux相关权限:

ps -AZ

查看文件的SeLinux相关权限:

ls -lZ

在源码中关闭SeLinux:

找到相应的BoardConfig.mk,打开文件,找到BOARD_KERNEL_CMDLINE项,在这一行的结尾增加

androidboot.selinux=permissive(前面加一个空格)

 

 Posted by on 2019-12-17

编译Android8.1修改默认分辨率和屏幕密度

 分类:Android, Java 阅读 (590)  编译Android8.1修改默认分辨率和屏幕密度已关闭评论
12月 162019
 
一、第一步:首先修改frameworks/base/packages/SettingsProvider/res/values/defaults.xml

增加两项

这里修改分辨率为1024,768,屏幕密度为160

注意:如果是定制的系统,可能在系统相关的目录下有一个覆盖的defaults.xml,要修改那个xml,一般在device/xxx/xxx_xxx的子目录中

二、第二步,在DatabaseHelper.java中加载默认值

在文件frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java中做如下修改:

在loadSecureSettings中增加如下代码

loadStringSetting(stmt, Settings.Secure.DISPLAY_DENSITY_FORCED, R.string.display_density_forced);

在loadGlobalSettings中增加如下代码:

  loadStringSetting(stmt, Settings.Global.DISPLAY_SIZE_FORCED, R.string.display_size_forced);

 Posted by on 2019-12-16