2012-05-21 43 views
7

我試圖從我的java代碼安裝系統應用程序,到目前爲止,我還沒有取得任何成功。

以下是我到目前爲止所做的:Android:以編程方式將apk複製到/ system/app

  1. 我的設備已生根。
  2. 我的「安裝程序」應用程序作爲系統應用程序安裝。 (手動將其複製到/ system/app)
  3. 我已經在平臺密鑰上籤署了安裝程序apk,並且在清單中有android:sharedUserId="android.uid.system"
  4. 我一直在嘗試(並嘗試,然後更多)爲Runtime.getRuntime.exec("su")。我打算將系統分區掛載爲rw,爲apk執行cat,然後將系統分區設爲ro。以下是命令列表:

    mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system<br> 
    cat /sdcard/application.apk > /system/app/application.apk<br> 
    mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system<br><br>The application.apk here is the app being installed from the installer app. This app is also signed with platform key, and has the sharedUserId configured. 
    
  5. 我已要求清單中的INSTALL_PACKAGES權限。

我已經嘗試了許多exec(「」)格式的變體,包括在每個命令中使用'su -c'。我得到了「斷管」異常和安全異常。有時候,我沒有發現異常,但文件沒有被複制。


請讓我知道我在這裏失蹤。有沒有人得到這個工作?

謝謝!

+0

在相關說明上,使用平臺密鑰簽署的應用程序和具有sharedUserId = system的應用程序之間有什麼區別?和應用程序目前在/系統/應用程序? – Chaitanya

+0

/system/app中的應用程序可以訪問權限級別2(據我所知不是1)。無論授予的權限如何,帶有系統sharedUserId的應用程序都會繼承授予「父」應用程序的權限,並且除了運行在與「父」相同的進程ID上。各種API檢查應用程序的進程ID,如果它們不是特定類型,則拒絕對它們的訪問。儘管2大多數是緊密相連的,但它們並不總是*並駕齊驅。這是描述它的非技術方式,我相信其他人會做得更好...... – slinden77

回答

4

我一直在挖,這裏是結果:

  • Android有此檢查在su.c: 「Android的源根」 /system/extras/su/su.c]
/* Until we have something better, only root and the shell can use su.*/ 
myuid = getuid(); 
if (myuid != AID_ROOT && myuid != AID_SHELL) { 
    fprintf(stderr,"su: uid %d not allowed to su\n", myuid); 
    return 1; 
} 

ChainsDD(超級用戶)和氰MOD解決這個問題通過實現自己的su.c:https://github.com/CyanogenMod/android_system_su/blob/master/su.c

我現在接受這個答案。

+0

應用程序可以將自己複製到系統文件夾而不是使用外部應用程序嗎?您能否澄清用於複製應用程序的命令?另外,如何獲得平臺密鑰?謝謝。 – Dania

相關問題