本文基于qcom msm8909 android5.1平台,因为客户需求以及实际使用,主板接入的显示屏有各种尺寸,这样对屏幕的显示造成了极大的影响,因此着手开发了一个设置功能,主要针对屏幕分辨率和density等参数的设置。

首先想到的是调试过程中,在android4.3之后,官方引入了一个wm的命令工具(wm工具简介及使用),但在开发过程中,遇到个很蛋痛的问题,问题现象如下:

笔者采用jni的方式使用C popen函数执行wm 相关命令,这里解释下为什么引用popen函数,不是也可以用system,exec族么?原因是我们可以通过popen得到执行命令的结果。

但当所有代码噼里啪啦噼里啪啦的写完之后,运行发现:卧槽,为啥wm + 子命令 可以完美的执行,但wm+子命令+参数却毫无反应,jni执行下去,你真的没看错,毛反应都没有,然后我没办法,将jni中C 代码独立出来,单独编译成可执行程序放入系统中,执行,卧槽,没问题啊,完美执行啊,这TM是啥情况?搞了一天,脑子越搞越昏,完全不知道问题何在?(最终问题也没找到,有人知道的希望指导指导)

那么,时间比较紧,此路不同,当寻他路,笔记就开始一路百度,谷歌,突然,发现个比较闪眼的字眼--反射,脑子里闪过,反射是什么?(这里解释下,笔者涉及的知识面毕竟广,但都不精,而且从业经验还比较少,希望各路大佬不要鄙视)。

于是乎,又开始百度,谷歌,但是,问题又TM来了,我按照网上的教程,叫aidl文件导入工程,TM的简直是各种奇葩错误,无从下手啊,在挣扎了几个小时候,又放弃了,继续开始寻求他路,但寻路核心还是绕着反射这两个字以及我想要反射获取的方法的类。

终于,皇天不负有心人,突然找到个博客,这个博客也许对我没太大帮助,但,他告诉我,我可以在我得android工程中,使用系统隐藏的API,哈哈哈哈哈哈哈哈哈,既然可以这样,那TM就好办了啊。

博客地址:android模拟按键问题总结[使用IWindowManager.injectKeyEvent方法]_xudongdong99的博客-CSDN博客_android injectkeyevent

导入源码编译的jar,以供自己的android项目使用隐藏系统API:

out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar

将class.jar 导入 android项目

导入后发现报错了:Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug':unable to merge dex

这个应该是某些包名冲突了,但我表示很懒,不想一个个找是哪个冲突了啊,于是乎,百度到个救命稻草:

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'的解决办法_DimpleMe的博客-CSDN博客

然后,编译,哦豁,过了,nice!

既然可以使用系统隐藏的API,那我何不参照wm命令是怎么实现的呢?

找到wm命令的源码位置:vi frameworks/base/cmds/wm/

打开src/com/android/commands/wm/Wm.java

先分析下源码内容:分析内容

通过分析得到,原来他就用了这个aidl里面的方法:IWindowManager

所用部分方法:

wm size :getInitialDisplaySize,getBaseDisplaySize,setForcedDisplaySize,clearForcedDisplaySize

wm density:getInitialDisplayDensity,getBaseDisplayDensity,setForcedDisplayDensity,clearForcedDisplayDensity

其余的大家可以阅读源码自己分析下。

这样,我参照该源码实现,移植到我的项目工程中,然后编译,哦豁,完美,可以运行了,nice!

移植步骤可参考如下:

这样,就可以根据需要去调用IWindowManager里面的接口的方法了,简直是美滋滋。

哈哈哈哈哈哈,高兴之余,老天又开了个玩笑,滴滴,运行后执行修改操作,艹,报错了!!!

logcat 一看,去你大爷的,还好,问题不大,权限问题,哈哈哈,源码再手,不怕你权限问题。

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />权限报错

具体找不到log了,就是这个权限报错,那么,兵来将挡水来土掩啊,怕甚,搞个系统签名,NND,签名过后,install,run

nice,成功设置,完美!!!

Ps:同样的方法我应用到qcom msm8953 android7.1 平台上,遇到了一些其他问题,这里记录下。

1.导入android7.1 的 classes.jar,出现如下错误

解决办法:参考AndroidStudio 编译报错 DexArchiveBuilderException_T9的第三个三角的博客-CSDN博客

gradle.properties 中 添加

android.enableD8 = true

2:IWindowManager中部分方法找不到

解决办法:相比android5.1,部分方法有点变动,阅读参考android7.1 WM源码,作相应的调整

3:给app应用系统签名打包出错

解决方法:

参考解决平台apk签名错误:no conscrypt_openjdk_jni in java.library.path_Hellolefty的博客-CSDN博客

解决方法:将以下所有文件放入同一个文件夹命名为sign
1、在Android系统源码中的\build\target\product\security目录下找到        platform.x509.pem 和platform.pk8两个文件;

2、在out/host/Linux-x86/framework目录下找到signapk.jar文件

3、找到 libconscrypt_openjdk_jni库
若是Linux系统
拷贝prebuilts/sdk/tools/linux/lib64/libconscrypt_openjdk_jni.so
若是mac系统
拷贝prebuilts/sdk/tools/darwin/lib64/libconscrypt_openjdk_jni.dylib

4、需要进行系统签名的app.apk

5、进入sign目录执行如下命令即可完成签名:
java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 app.apk app_sign.apk

【此做法在linux系统里才有效】java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 app-release.apk new.apk

文中语气词什么的比较多,还望各位看官莫要鄙视,有问题请多多指教,感谢!!!

android系统定制添加分辨率,density设置相关推荐

  1. Android系统定制源码修改 - MTK平台

                                         Android系统定制源码修改 -  MTK平台  1.修改开机弹出欢迎使用SIM MTK工程/mediatek/packag ...

  2. cm-14.1 Android系统定制(二):内置系统应用

    声明 Android系统定制时免不了预置一些APP进系统中: 预置的结果一般有三种:       1.预置的APK用户可以卸载,恢复出厂设置后APK不恢复:       2.预置的APP用户可以卸载, ...

  3. 为Android系统定制重启功能

    按计划每周更新一篇技术博文,第二篇:<为Android系统定制重启功能> 一.Android系统重启的实现方式 1.广播方式 之前的博文介绍过这种方式<使用广播实现的Android关 ...

  4. cm-14.1 Android系统定制(三):Setting相关的默认值、系统属性

    声明 通常情况下,Android系统定制的一个重要环节是对系统性功能的裁剪.增加,最能体现系统功能的就是Setting应用中的设置项,系统功能的多少一般都会体现在Setting中. 另外就是系统的属性 ...

  5. 在Android系统中添加一款新铃声

    想在Android系统中添加铃声,可以通过adb push 的方法,但如果要多次修改系统,每次push进去就显得太费劲了,这里有个简单的方法,就是把铃声编译进android 的system.img文件 ...

  6. android系统源代码添加新产品的支持

    不同项目共用一个CPU等核心平台,项目外围有些差异,需要共用绝大部分代码,比如我们基于高通msm8937 64位CPU开发3款产品(每款产品定义为一个项目的体现形式),我们用DEVELOP_PROJE ...

  7. Android系统定制开机logo和开机动画

    定制开机logo和开机动画 开机logo 开机动画 bootanimation.zip 生成zip文件 添加新的开机动画 开机logo MTK ASOP中lk阶段的logo是开机后的第一个界面,也被称 ...

  8. 向Android系统中添加模块及产品流程

     添加Android模块  一.基础知识: (1)在Android系统中,编译都是以模块(而不是文件)作为单位的,每个模块都有一个唯一的名称: (2)为了将模块编译到Android系统中,每个模块都需 ...

  9. android修改默认遥控器键值,RK3128平台android系统修改添加遥控器键值码值

    本帖最后由 微笑,一路向前 于 2017-1-4 15:34 编辑 最近帮客户定制RK3128平台的固件,涉及到定制新的遥控器,需要添加或修改遥控码值.RK3128平台Android系统修改遥控器码值 ...

最新文章

  1. 缩短网址将成微博的重要安全性问题
  2. 滤波电容、去耦电容、旁路电容作用
  3. 聚类常见距离及python实现
  4. 【VC基础】1、特性和分类
  5. Java中四种访问修饰符的区别
  6. fantouch os Android 7,Funtouch OS 3.1 with Android 7.1升级计划
  7. Codeforces 991E. Bus Number (DFS+排列组合)
  8. lamp mysql5.0_CentOS 5/6 LAMP(Apache MySQL PHP)一键安装脚本
  9. java list 重复对象_list集合去除重复对象的实现
  10. 崛起的 Python,真的影响了 76 万人?
  11. Gdiplus的使用 gdi+
  12. 【asm基础】使用vs创建asm库
  13. MessageFormat的用法
  14. ubuntu磁盘空间清理
  15. Unbuntu 安装Protobuf
  16. HHKB连不上Ubuntu
  17. 含8的数字的个数 (10分)
  18. mysql分组分批_[Mysql]分组取最新一条
  19. NCPC2016-A-ArtWork
  20. signature=1eff1aaee251c280dde2d73a420031b7,Signature of the orthogonal companion in Kreĭn spaces.

热门文章

  1. 写一段python爬取付费音乐的代码
  2. [深入研究4G/5G/6G专题-40]: URLLC-11-《3GPP URLLC相关协议、规范、技术原理深度解读》-5-5G Qos原理与架构: 切片、PDU会话、QosFlow、5QI、DRB
  3. android视频的编辑(录制,裁剪,合成)(1)
  4. 06CookieSession-12. HttpSession的钝化和活化
  5. (自兴人工智能)python元组
  6. 微信授权登录与绑定或者改绑手机号关系?
  7. linux文件管理命令ppt,linux命令以及文件管理.ppt
  8. ​最适合女生的10个副业(上篇),只要你有执行力,实现财富自由很简单!
  9. ms office excel2013教程 - 套用表格样式
  10. 如何使用计算机word,电脑系统教程:电脑Word分栏怎么用