Android應用程序只在有限的范圍內有讀取權限,如/data/data/*.*.*/,而如果想讓app訪問其它地方的資源時,就必須要獲取更高的權限,像system或者root,root的獲取方法也是基於system的,因此本文先完成system權限的獲取,實際上一般的應用有system的權限基本上也夠了。
1、修改apk內的AndroidManifest.xml
在manifest節點中加入android:sharedUserId="android.uid.system"
2、編譯工程產生apk文件
eclipse自動就幫你產生
3、解壓縮工具打開*.apk
刪除META-INF文件夾中的CERT.RSA和CERT.SF兩個文件
4、給*.apk文件簽名
這步需要在android源碼中進行
1)cd build/tools/signapk
2)javac signapk.java(這裡產生*.class)
3)mkdir test/com/android/signapk
4)cp *.class test/com/android/signapk
5)jar cvfm signapk.jar SignApk.mf -C test/ .(這裡產生signapk.jar)
5、制作簽名後的apk文件
1)mkdir SignApk
2)步驟4中產生的signapk.jar拷貝到SignApk文件夾中
3)cp build/target/product/security/{platform.x509.pem,platform.pk8} SignApk
4)將apk也拷貝到SignApk中
5)java -jar signapk.jar platform.x509.pem platform.pk8 *.apk new.apk
6、制作新的image文件
將new.apk導入到android源碼目錄中(一般是out/target/product/平台/system/app/下),編譯生成新的system.img,再download到開發板
7、測試
如果app涉及到文件讀寫,可以待系統啟動後adb shell到板子上,ls -l查看app安裝目錄(/data/data/*/*/*/)的權限,看看是不是變成system:system了。
更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11