2010-01-05 140 views
22

如何將我的應用程序包 推送到Android模擬器「/ system/app」文件夾?將我的apk安裝到/ system/app

我已經嘗試過使用:
「亞行推myApk.apk /系統/應用程序」
,這讓我這個:

"failed to copy: ... No space left on device" 

雖然從設置 - > SD卡&電話存儲, 我得到37Mb的內部可用空間。

這個需求的整點是
與權限有關。

我需要有INSTALL_PACKAGES許可
,我知道通過puting在/ system/app中我的申請有,
,我得到的許可。

回答

4

通常情況下,訪問「/ system /」目錄的唯一方法是使設備生根。但我不完全知道模擬器是否需要這樣做。這可能是你的問題。

+1

在製作「adb push ...」之前, 我也使用adb root, 這應該給我root權限。 謝謝 – Tsimmi 2010-01-05 16:12:27

+1

我有一個設備紮根,但我不能使用adb root,只有adb shell「su - 」, – david 2016-07-12 02:44:12

-3

如果您只是想安裝它,您可以隨時執行:adb install myApk.apk

+0

如果我安裝我的包呀, 我不不會像INSTALL_PACKAGES那樣獲得系統權限。 謝謝;-D – Tsimmi 2010-01-05 16:10:35

+0

這是做到這一點的正確方法。即使您對設備擁有根訪問權限,您也無法將APK或任何內容寫入'/ system',因爲該分區以只讀方式安裝。 – 2010-01-05 23:51:41

+0

您沒有獲得安裝軟件包的權限,因爲這是一個安全問題。應用程序不應該能夠在人們的背後安裝其他軟件包。如果你需要安裝另一個軟件包,告訴用戶他們需要它的正確方法是調用另一個軟件包的意圖。如果意圖不存在,則通知用戶(通過彈出窗口或其他文本)他們必須下載其他應用程序才能訪問該功能。 – AndrewKS 2011-04-15 18:47:19

2

設置 - > SD卡&手機存儲說關於/數據文件夾。

/系統是單獨安裝的,我想除非你自己製作Android版本,否則沒有辦法在那裏編寫。

見坐騎運行

adb shell 

# df 
1

你需要運行adb remount第一,那麼它應該讓你adb push/system文件夾

1

下面的批處理文件將在文件夾中安裝任何的apk文件到/ system/app目錄。它將系統驅動器掛載爲rw,然後複製文件。

要使用它,請將以下代碼放入文本編輯器中,並將其保存爲install.bat在Windows機器上。然後雙擊批處理文件以安裝與批處理文件位於同一文件夾中的任何APK文件。

注意:除非設備上有root用戶,否則無法重新掛載系統分區。我主要在默認爲root的模擬器上使用它(原始問題),但在物理設備上這個概念應該是相同的。

 
@ECHO OFF 
%~d0 
CD %~dp0 
adb root 
adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system 
adb shell rm /system/app/SdkSetup.apk 
for /f %%a IN ('dir /b *.apk') do adb push %%a /system/app/. 

+0

對不起我的小批量文件知識,我認爲批處理文件也需要root權限,我是對的嗎?在android中使用批處理文件你可以給鏈接?如果在Android演示中給出一個批處理文件,那麼這個批處理文件很好,謝謝 – pengwang 2012-05-05 02:16:26

+0

是的,你需要設備上的root用戶運行批處理文件並將某些內容拷貝到系統掛載中。沒有它,你無法重新安裝驅動器rw。 ADB在仿真器上以root用戶身份運行。 用法非常簡單,我已更新我的帖子以包含更多說明。 – Doug 2012-05-09 17:32:07

+0

「for/f %% a IN('dir/b * .apk')做adb push %% a/system/app /的意思是什麼。」它可以爲許多apk放到/ system/app /? – pengwang 2012-05-11 08:21:10

0

即使在adb remount之前,您應該更改adb shell中/系統的權限。 您可以使用chmod更改權限。

50

我可以按以下步驟安裝APK至/system/app

  1. 將APK推送到SD卡。

    $ adb push SecureSetting.apk /sdcard/ 
    
  2. 進入控制檯,並獲得外殼

    $ adb shell 
    
  3. 切換到超級用戶。如果你的設備沒有植根,請先植根。 (如果你不知道該怎麼做,只是谷歌)具有寫權限

    $ su 
    
  4. 重新掛載系統分區。不支持

    $ mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system 
    
  5. 貓您的APK從/sdcard//system/,有些人得到了與cp命令由於cp失敗。因此改爲使用cat

    $ cat /sdcard/SecureSetting.apk > /system/app/SecureSetting.apk 
    
  6. REMOUT /system分區恢復到只讀,並退出

    $ mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system 
    $ exit 
    

然後重新啓動設備,在APK應已安裝在/system/app

+2

謝謝!那很棒。有什麼辦法可以避免重新啓動嗎? – Muzikant 2013-02-10 13:31:13

+2

找到避免重新啓動的方法,但只有在安裝了busybox時才能使用。你只需要用上面的命令'install /sdcard/yourapkfile.apk/system/app'代替REPLACE步驟5上面的答案 – Muzikant 2013-03-11 13:23:05

+1

我發現,對於第4步,大部分時間它也在工作: mount -o remount,rw/system – posaidong 2014-02-13 02:39:16

0

如果您的apk足夠小以便推入,然後再次嘗試一些時間。我遇到了同樣的問題,並嘗試了兩次,以將系統推送到/ system/app/

0

顯然,「/ system」mount中沒有足夠的空間存儲應用程序。你可以用「adb shell df」命令來檢查。

爲了解決這個問題,你需要設置分區的大小參數充分,同時啓動您的AVD是這樣的:

emulator.exe -avd <your avd name> -partition-size 512 
0

檢查是否有足夠的inode,你可以有足夠的內存,但沒有足夠的inode,即文件佔位符。

1

使用以下超級用戶ADB shell的命令。將您的APP的APK複製到您的SD卡或內部存儲器中。

$ adb shell 
$ su 
$ mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system 
$ cp /sdcard/<Your_APK_PATH> /system/app/file_name_comes_here.apk 
$ chmod 644 /system/app/<YourAPK>.apk 

然後重新啓動設備

3

這些是如果正在針對Android 5.0或更高版本的設備安裝系統的apk的步驟。對於舊版本使用posaidong的回答

重命名的apk文件base.apk

$ adb push base.apk /sdcard/ 

進入控制檯,並獲得外殼

$ adb shell 

切換到超級用戶。如果你的設備沒有植根,請先植根。 (如果你不知道該怎麼做,只需Google。)

$ su 

用WRITE權限重新掛載系統分區。

$ mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system 

在/ system/app文件夾內創建一個Test目錄。 (或者也可以使用/ system/priv-app)。理想情況下,此文件夾名稱應爲應用程序名稱現在,讓我們使用測試

$ mkdir /system/app/Test 

需要此目錄

$ chmod 755 /system/app/Test 

副本中

$ cat /sdcard/base.apk > /system/app/Test/Base.apk 

REMOUT /系統分區您base.apk回爲只讀,和755的許可退出

$chmod 644 /system/app/Test/Base.apk 

Re需要此目錄的644權限

$ mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system 

$ exit 

重新啓動您的設備。當引導完成後,你應該可以看到更新的Android系統消息...

+0

重要說明:爲了訪問像「android.permission.SHUTDOWN」這樣的系統權限,使用'/ system/priv-app'目錄而不是'/ system/app' **!這也是一個重要的評論:https://stackoverflow.com/questions/2007024/push-my-apk-to-system-app/30340018#comment38365210_10362072 – OneWorld 2018-02-08 16:40:08

0

我已經多次碰到過這種情況,而複製的apk文件/system分區,使用以下步驟可以最終解決它:

  • 檢查免費空間/system分區使用dfadb shell。最有可能的可用空間將小於apk文件的大小。

    Filesystem    Size  Used  Free Blksize 
    /dev       1.3G 80.0K  1.3G  4.0K 
    /sys/fs/cgroup    1.3G 12.0K  1.3G  4.0K 
    /mnt/secure     1.3G  0.0K  1.3G  4.0K 
    /mnt/asec     1.3G  0.0K  1.3G  4.0K 
    /mnt/obb      1.3G  0.0K  1.3G  4.0K 
    /system      3.5G  3.5G 10.0M  4.0K 
    /efs      15.7M  2.8M 12.9M  4.0K 
    /cache      192.8M 736.0K 192.1M  4.0K 
    /data      25.5G 12.7G 12.8G  4.0K 
    /persdata/absolute   4.9M 120.0K  4.8M  4.0K 
    /sbfs      10.8M  8.0K 10.7M  4.0K 
    /mnt/shell/knox-emulated 25.5G 12.7G 12.8G  4.0K 
    /mnt/shell/privatemode  25.4G 12.7G 12.7G  4.0K 
    /mnt/shell/emulated   25.4G 12.7G 12.7G  4.0K 
    /preload      5.8M  3.3M  2.5M  4.0K 
    
  • 使用的du /系統讓每個文件夾&文件的大小在/system分區。排列按大小(S)的順序輸出得到(類似的東西):

    4091840 /system/ 
    1199416 /system/app 
    964064 /system/priv-app 
    558616 /system/lib64 
    373320 /system/lib 
    206624 /system/vendor 
    170952 /system/app/WebViewGoogle 
    148824 /system/app/WebViewGoogle/lib 
    125488 /system/voice 
    125480 /system/voice/embedded 
    122880 /system/app/Chrome 
    106520 /system/framework 
    102224 /system/priv-app/Velvet 
    96552 /system/app/SBrowser_3.0.38 
    93936 /system/vendor/lib64 
    93792 /system/vendor/lib64/egl 
    92552 /system/tts 
    92512 /system/tts/lang_SMT 
    ... 
    
  • /system/voice/embedded刪除不必要的文件,/system/tts/lang_SMT(語言/區域設置支持)和/或其他文件夾,釋放足夠的空間/system分區以適應新的apk文件。刪除/system以外的分區中的文件可能無助於此場景。 (NB:這個步驟可能需要在讀寫模式ROOT權限,並重新安裝/system分區使用安裝鄰RW,掛載/系統