bcoder

Android8.1顶栏SystemUI下拉菜单中的快捷按钮修改

 分类:Android, Java 阅读 (3,235)  Android8.1顶栏SystemUI下拉菜单中的快捷按钮修改已关闭评论
12月 092019
 
1、默认的快捷按钮的项目在res/values/config.xml中

项目的名称:quick_settings_tiles_default

默认的值为:wifi,bt,dnd,flashlight,rotation,battery,cell,airplane,cast

2、所有的快捷设置项

在res/value/config.xml中,项目名称:quick_settings_tiles_stock

项目值:wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,location,hotspot,inversion,saver,work,cast,night

  • wifi – 无线网络
  • bt – 蓝牙
  • dnd – 勿扰模式
  • flashlight – 手电筒?
  • rotation – 自动旋转
  • battery – 省电模式?
  • cell – ?
  • airplane – 飞行模式
  • cast – 投射
  • location – 位置信息
  • hotspot – 无线热点
  • inversion – 反色
  • saver – 流量节省程序
  • work – ?
  • night – 夜晚模式?
3、有个编辑按钮,可以编辑常用的快捷按钮

当编辑后,按钮的配置存储在系统数据库的Secure.QS_TILES常量中,常量值:sysui_qs_tiles

使用下面命令可以查看修改后的值:

adb shell settings get secure sysui_qs_tiles

 Posted by on 2019-12-09

Android系统源代码跟踪调试小技巧

 分类:Android, Java 阅读 (1,504)  Android系统源代码跟踪调试小技巧已关闭评论
12月 062019
 

本来一直是在源码中加Log的方法进行调试

但是有些函数很长,if分支也很多,而且还有一些是通过线程或者binder、sendMessage等异步的方式调用的,加上系统编译又很慢,调试起来真是费劲

后来想到程序报错时会输出java的函数栈,我们能不能利用这个呢?可以一直追踪到函数的前几个调用函数。

答案是可以的,我们可以在代码中加入下面的代码,让程序打印调用栈

new Exception().printStackTrace()

加上这个以后,会打印堆栈,但不是抛出异常,这样就很方便的知道函数的调用栈列表了

对于调用Aidl时客户端的堆栈跟踪

假如我们跟踪某段代码后,发现这段代码是通过aidl被调用的,那我们就跟踪不到调用端的代码了,那么我们可以通过throw一个Exception的方式还跟踪。调用端会触发RemoteException而打印出堆栈。

当然,如果客户端try catch了RemoteException这个方式可能就不起作用了

throw new IllegalStateException(“Throw an aidl remote exception.” );

客户端会报如下样式的错误:

 

 Posted by on 2019-12-06

修改Android8.1吉字节、千字节、光字节、太字节的问题

 分类:Android, Java 阅读 (1,708)  修改Android8.1吉字节、千字节、光字节、太字节的问题已关闭评论
12月 032019
 

Android8.1显示GB时默认显示吉字节

修改方法如下:

在源码目录下/external/icu/icu4c/source/data/unit中找到zh.txt文件

打开此文件,然后将其中的吉字节修改为GB,千字节修改为KB,兆字节修改为MB,太字节修改为TB,每一项可能有多个地方需要修改,然后保存

因为这个目录下的要单独编译,make clean都不管用,执行下面的命令:

将source/data/out/tmp/目录下的icudt58l.dat文件push到手机/system/usr/icu/目录下,重启手机即可查看效果

然后将source/data/out/tmp/目录下的icudt58l.dat文件拷贝到source/stubdata中,下次编译系统的时候就直接显示GB了。

 

转载自:https://www.jianshu.com/p/fadf33914875

 Posted by on 2019-12-03

imx8+Android8.1修改系统默认语言的方法

 分类:Android, Java 阅读 (1,047)  imx8+Android8.1修改系统默认语言的方法已关闭评论
12月 032019
 
一、修改方法

在文件device/fsl/mek_8q/BoardConfig.mk中增加一行

PRODUCT_LOCALES = zh_CN

设置变量PRODUCT_LOCALES的值为zh_CN

注意

1、别写在某个if判断中

2、不需要make clean,直接make就可生效

3、验证方法:可以查看out/target/product/mek_8q/system/build.prop中ro.product.locale的值验证,这里正确了再烧录验证

 

 

 Posted by on 2019-12-03

Android插件化初探之apk加载和反射调用函数

 分类:Android, Java 阅读 (1,316)  Android插件化初探之apk加载和反射调用函数已关闭评论
12月 022019
 
一、整体试验步骤

1.建立子apk,新建一个android应用项目,叫firstplugin

2.在java根目录下新建一个类,叫LoginImpl

3.在LoginImpl.java中实现一个静态方法, login(),此方法只输出一个Log

4.编译生成apk,push到手机的/sdcard目录,此处生成的文件名为firstplugin-debug.apk

5.开始建宿主apk,新建另外一个Android应用项目PlugInHostApp

6.在MainActivity的onCreate中增加如下代码:

7.编译运行,看log中是否输出了login这个字符串

二、遇到的问题和解决方法

1.java.lang.ClassNotFoundException: Didn’t find class “com.zht.car.firstplugin.LoginImpl” on path错误

解决方法:

  1. 查看是否有访问外部存储目录的权限(笔者遇到的就是这个问题,程序不会在new DexClassLoader时报无权限访问或者找不到文件的错误,而会在loadClass时报找不到类的错误)
  2. 关闭Android Studio的Instant run选项,在菜单Settings->Build, Execution, Deployment中(笔者是在Ubuntu中使用Android Studio,没找到此选项)
 Posted by on 2019-12-02

Android中获取应用的安装器名称

 分类:Android, Java 阅读 (1,020)  Android中获取应用的安装器名称已关闭评论
11月 292019
 

通过获取安装器的名称我们可以判断应用是来自哪个应用市场

当然现在普遍是通过配置gradle来区别应用的安装渠道,不过这个还可以用于判断用户是不是手动进行安装的

代码很简单,如下:

结果示例:

如:com.huawei.appmarket – 是华为应用市场

com.android.packageinstaller – 是用户手动安装的

 Posted by on 2019-11-29

通过action获取其他应用中的Activity

 分类:Android, Java 阅读 (1,213)  通过action获取其他应用中的Activity已关闭评论
11月 292019
 

测试环境:自己编译的Android8.1系统(userDebug模式)

首先目标应用的AndroidManifest.xml中定义Activity的时候,必须设置一个intent-filter以及action属性,如下:

上面的代码Test1Activity和Test2Activity都有一个intent-filter属性,以及他下面的action子属性

然后使用下面的代码就可以获取这个应用中的有action=”action_abc”的activity了。

 

 Posted by on 2019-11-29

imx8+android8.1开启adb remount过程

 分类:Android, Java, Uncategorized 阅读 (1,955)  imx8+android8.1开启adb remount过程已关闭评论
11月 262019
 

博文背景:imx 8qxp主板,android8.1系统,系统编译模式userDebug模式

一、开启成功的步骤

  1. 打开系统的开发者选项,并在开发者选项中将OEM unlocking设为开启状态
  2. 连接adb并执行adb root
  3. 执行adb disable-verity
  4. 执行adb reboot bootloader
  5. 连接otg线
  6. 系统重启后会停在bootloader处,在电脑上执行fastboot oem unlocking,(在Ubuntu中需要另外开一个窗口执行这个命令,否则一直提示< waiting for any device >)然后等待提示成功后重启车机
  7.  

  8. 重启成功后,再执行adb root和adb remount即可

 

 Posted by on 2019-11-26

如何让android系统编译时显示更详细的log

 分类:Android, Java 阅读 (2,933)  如何让android系统编译时显示更详细的log已关闭评论
11月 212019
 

本文基于android8.1系统编译

正常情况下,编译时很多信息都被隐藏掉了,比如如下这种

有多条内容的都被折叠到一行显示了,我们就看不到详细的信息了

加入我们加入一个tee 管道输出,命令如下:

make|tee detailed_log.txt

再执行时原来被折叠的行都可以显示出来了。

 Posted by on 2019-11-21