使用android隐藏api实现亮度调节的方法
android 1.5之后将调节亮度的api隐藏了,不过android的源码中依然有方法可以实现,如下:
ipowermanager power = ipowermanager.stub.asinterface(servicemanager
.getservice("power"));
if (power != null) {
power.setbacklightbrightness(brightness);
上面的代码无法直接在官方的sdk中调用,会提示找不到ipowermanager和i servicemanager,需要下载android的源码,将调用这个方法的工程在android源码环境下编译。
编译方法如下,在调用该方法的工程根目录下创建android.mk文件:
local_path:= $(call my-dir)
include $(clear_vars)
local_module_tags := user
local_src_files := $(call all-subdir-java-files)
local_package_name := myproject
local_certificate := platform
include $(build_package)
另外,还需要在应用程序的androidmanifest.xml中的manifest节点中加入android:shareduserid="android.uid.system"这个属性。(更正,这个属性不需要添加)
将工程目录拷贝到/packages/apps/下,执行mmm编译。会在out目录下生成apk文件,这里的apk还无法直接使用,会提示签名不符,原因是程序想要运行在系统进程中还要有目标系统的platform key。
接下来使用platform key对apk签名:
1. 用压缩软件打开apk文件,删掉meta-inf目录下的cert.sf和cert.rsa两个文件。
2. 使用目标系统的platform密钥来重新给apk文件签名。首先找到密钥文件,在我的android源码目录中的位置是"build\target\product\security",下面的platform.pk8和platform.x509.pem两个文件。然后用android提供的signapk工具来签名,signapk的源代码是在"build\tools\signapk"下,用法为"java –jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk"
签名后的apk就可以使用了,通过这种方法还可以使用其他的隐藏api。
推荐阅读
-
Android编程实现全局获取Context及使用Intent传递对象的方法详解
-
android UI进阶之android中隐藏的layout 抽屉的使用方法
-
使用android隐藏api实现亮度调节的方法
-
android通过Location API显示地址信息的实现方法
-
Android编程使用加速度传感器实现摇一摇功能及优化的方法详解
-
Android开发使用Activity嵌套多个Fragment实现横竖屏切换功能的方法
-
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
-
Android使用Activity实现从底部弹出菜单或窗口的方法
-
Android编程实现悬浮窗获取并显示当前内存使用量的方法
-
SpringBoot使用validation-api实现对枚举类参数校验的方法