apk獲得Android系統權限的方法


想寫一個重啟系統的apk(reboot.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" >  <!--添加該屬性-->
    
<uses-permission android:name="android.permission.SHUTDOWN"/> <!--添加該權限-->
……
</manifest>
ps: android:sharedUserId ="android.uid.system" 將app提升到系統權限,需要到源碼中編譯;還有關機權限: android.permission.SHUTDOWN
 

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/t arget/ 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上連安裝都安裝不了。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM