SystemUI本身和系统的关联性比较大,在4.4以后,SystemUI和锁屏又整合在一起了。为了方便看代码和调试,将5.1的SystemUI提取出来(包括锁屏).
以下是具体的步骤:
将/frameworks/base/packages/SystemUI copy出来,在eclipse中导入工程。
将/frameworks/base/packages/Keyguard 里面src下的文件都拷贝到工程中
完成以后如图所示
因为SystemUI里面用到了很多系统接口,所以要把系统jar包作为lib加进来,需要用到的jar包为
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
out/target/common/obj/JAVA_LIBRARIES/service_intermediates/classes.jar
out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/javalib.jar
将这个三个jar作为systemlib添加进来。
这个时候工程里会报很多错,一般先解决资源报错问题。将Keyguard文件夹里res下面的资源都弄过来,文件名重复的,可以改文件名,也可以把Keyguard里面的资源copy到SystemUI中,比如把2个strings.xml整合在一起。注意eclipse要选java 1.7版本。
这一步将会花大量的时间去弄(反正我第一次弄了很久)。
把Keyguard里面AndroidManifest.xml里的权限都拷贝到SystemUI的AndroidManifest中,重复的删掉
给SystemUI AndroidManifest.xml中增加一个versionCode和versionName,因为机器启动安装priv-app的时候会检查这个权限
最好设置一个minSdkVersion,当然也可以不设置,不设置有可能图片会被拉伸。
代码里用到EventLog的会报错,这个其实可以屏蔽掉就好
这个时候工程里应该没有什么错误了,开始编出一个apk。我们将编译出来的apk push到system/priv-app/SystemUI/中,重启之后发现SystemUI没出来或者出错。是因为SystemUI中用到了系统用户的权限,而要获得这个权限,必须用系统的签名。我们编译的是用eclipse默认的签名,当然不行。于是下一步需要改权限~_~,还真是麻烦,不过快好了。
将源码下的
Build/target/product/security/下的platform.x509.pemplatform.pk8拷贝出来
out/host/linux-x86/framework/signapk.jar 拷贝出来
将编译出来的apk解压,删除里面的META-INF文件夹
运行java -jar signapk.jar platform.x509.pem platform.pk8 SystemUI.apk New_SystemUI.apk
重新push 重启以后应该可以运行了。
以上操作,基于android 5.1源码,机器为Nexus 7二代。