Apk獲得系統許可權的方法
方法1:通過將專案作為一個模組,放到Android系統原始碼中進行編譯~~~
步驟如下:
- 在應用程式的AndroidManifest.xml中的manifest節點中加入”android:sharedUserId=”android.uid.system”這個屬性。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
……
android:sharedUserId="android.uid.system" > <!--新增該屬性-->
……
</manifest>
ps:android:sharedUserId=”android.uid.system” 將app提升到系統許可權,需要到原始碼中編譯;
2.編譯apk
(1)將應用程式的src檔案、res檔案和AndroidManifest.xml檔案拷貝到Android系統原始碼package/apps目錄下
(2)編寫一個Android.mk檔案(最簡單的方法就是拷貝其他模組中的Android.mk檔案),修改Android.mk檔案,加入LOCAL_CERTIFICATE := platform這一行
Android.mk:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $( call all-java-files-under, src)
LOCAL_PACKAGE_NAME := 你的專案名
LOCAL_CERTIFICATE := platform #新增這一句
include $(BUILD_PACKAGE)
(3)mm 編譯,生成apk
總結:其實就是把應用程式當作系統應用進行編譯~~這樣之後就會有系統許可權了。
=========================================================
方法2:這個辦法麻煩點,不過不用跑到原始碼環境下用make來編譯:
步驟:
同上,加入android:sharedUserId=”android.uid.system”這個屬性。
使用eclipse編譯出apk檔案,但是這個apk檔案是不能用的。
用壓縮軟體開啟apk檔案,刪掉META-INF目錄下的CERT.SF和CERT.RSA兩個檔案。
使用目標系統的platform金鑰來重新給apk檔案簽名。這步比較麻煩,
(4.1)首先找到金鑰檔案。是”build/target/product/security”路徑下的platform.pk8和platform.x509.pem兩個檔案。
(4.2)然後用Android提供的Signapk工具(即signapk.jar)來簽名。signapk的原始碼是在”build/tools/signapk”下。
(4.3)進入”build/tools/signapk”目錄下(接下來一直在該目錄下進行以下指令)
1.javac Signapk.java //編譯生成SignApk$SignatureOutputStream.class和SignApk.class檔案,將這兩個檔案拷貝到新建立的com/android/signapk目錄下。
2.jar cvfm signapk.jar SignApk.mf com //JAR命令使用中有解釋
3.將reboot.apk、platform.pk8、platform.x509.pem檔案複製到"build/tools/signapk"目錄下,然後執行下面指令。
4.java -jar signapk.jar platform.x509.pem platform.pk8 reboot.apk reboot_signed.apk //生成了reboot_signed.apk,這個就是最終想要的apk了
ps1:如果原始碼全編譯過,那就已經生成了signapk.jar檔案,可以直接拷貝過來,路徑在/out/host/linux-x86/framework/signapk.jar。當然,要是沒有環境全編譯原始碼,但又需要signapk.jar檔案,就可以通過以上方法來獲得。打包生成signapk.jar檔案可以重用,不用每次都重新打包。
ps2:key,就是上面第二個方法提到的platform.pk8和platform.x509.pem兩個檔案。用這兩個key簽名後apk才真正可以放入系統程序中。第一個方法中加入LOCAL_CERTIFICATE := platform其實就是用這兩個key來簽名。這也有一個問題,就是這樣生成的程式只有在原始的Android系統或者是自己編譯的系統中才可以用,因為這樣的系統才可以拿到 platform.pk8和platform.x509.pem兩個檔案。要是別家公司做的Android上連安裝都安裝不了。