1. 程式人生 > >Apk獲得系統許可權的方法

Apk獲得系統許可權的方法

方法1:通過將專案作為一個模組,放到Android系統原始碼中進行編譯~~~

步驟如下:

  1. 在應用程式的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來編譯:

步驟:

  1. 同上,加入android:sharedUserId=”android.uid.system”這個屬性。

  2. 使用eclipse編譯出apk檔案,但是這個apk檔案是不能用的。

  3. 用壓縮軟體開啟apk檔案,刪掉META-INF目錄下的CERT.SF和CERT.RSA兩個檔案。

  4. 使用目標系統的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上連安裝都安裝不了。