前言:安卓修改时间函数 SystemClock.setCurrentTimeMillis()。函数很简单,实际使用起来非常费事。本人系初学者,很多大佬回答都是运行什么脚本,但是实际我连第一步都不知道怎么做。
应用情景:安卓机为工程使用,没联网,而且由于板子电路问题,容易出现时间错误,需要人为手动调整时间。非首次将安卓源码的初始时间更改。使用IDE为Android Studio(网上好多回答都是Eclipse)
方案一: SystemClock.setCurrentTimeMillis()函数一直调用不成功,网上大部分回答都是在AndroidManifest.xml里的头添加android:sharedUserId=”android.uid.system”,但是实测根本不行,只要加入这句话,编译就会一直出现错误。大致意思就是权限不对称。也就是需要root。
方案二:还有一种用代码修改的,大致思路就是获取Linux的su(管理账户)然后输入Linux代码脚本进行时间修改。大致函数是Process process = Runtime.getRuntime().exec(“su”),然后在执行-date函数。查看安卓源码,这个su应该出现在xbin位置(可能与安卓版本有关)。这个Linux脚本也是不报错,然后无法更改时间,执行不成功。
方案三:修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行。很简单,实际我连Android.mk是什么在哪里都不知道(原本以为是源码,发现安卓源码这个文件非常多,肯定不是),最后知道这个文件是NDK会生成的一个文件,但是实际在Android Studio我根本找不到这个文件,那么也就无从下手去修改了。自己建立一个这个文件,依葫芦画瓢的按照格式写内容,最后发现不知道怎么将其导入工程内并应用,这条路也失败
方案四:修改APK,用signapk 将platform.pk8和platform.x509.pem两个文件打包到新的APK中,说实话,我自己真不知道如何做。我的编译环境需要加入android:sharedUserId=”android.uid.system,但是加入了就不能编译,不能编译就没有APK。如果取消这句话,能编译出APK并使用,但是不能此次修改代码后都这样做吧。失败。

好了,网上所罗列的思路基本都失败告终。最终还是得解决。思路还是要回归,怎么让本机生成的APK自带root功能。platform.pk8和platform.x509.pem这两个文件肯定要用,如果或得证书,网上查找大佬解决思路,结合实际操作
第一:在Linux环境下找到platform.pk8和platform.x509.pem这两个文件的位置,我的是在build\target\product\security ,也就是说一下代码会在这个文件路径下执行。
第二:执行openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt 你会发现这个目录下多了一个shared.priv.pem文件
第三:执行openssl pkcs12 -export -in platform.x509.pem -inkey shared.priv.pem -out shared.pk12 -name androiddebugkey 也就是把刚生成的文件和platform.x509.pem一起生成shared.pk12文件,本次操作需要输入密码android。目录下多了一个shared.pk12文件。
第四:将Linux的文件shared.pk12拷贝出来到windows系统下(我使用的是SSH软件,这个软件允许windows和虚拟机进行数据交换,好多安卓源码不一定非得在Linux下编译,可以拷贝到windows下用notepad++编译好在拷贝回去一样,可能是我用惯了windows??)
第五:找到本机的keytool文件位置(我的是在C:\Program Files\Java\jre1.8.0_25\bin),然后将CMD和shared.pk12文件一起拷贝到该目录
第六:管理员运行CMD,输入keytool -importkeystore -deststorepass android -destkeypass android -destkeystore debug.keystore -srckeystore shared.pk12 -srcstoretype PKCS12 -srcstorepass android -alias androiddebugkey 你会发现该目录多了一个文件debug.keystore。这个文件就是能使你APK获得root的证书文件。
第七:打开安卓项目,导入该证书文件即可
在这里插入图片描述
注意密码是android。然后加入android:sharedUserId=”android.uid.system”权限,编译,就可以正常使用函数SystemClock.setCurrentTimeMillis()。注:我用的是安卓真机测试的,之前程序有残留,再次编译的APK需要真机之前的APK卸载才能装上,不然IDE会出现证书冲突的错误。
本文最后通过http://blog.csdn.net/luzhenrong45/article/details/47733053得到实际解决的办法,也说明了中途在实际查找问题所遇到的困惑。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐