将我的apk推送到/ system / app

时间:2010-01-05 15:33:06

标签: android

如何推送我的应用程序包 到Android模拟器“/ system / app”文件夹?

我已经尝试过使用:
“adb push myApk.apk / system / app”
它给了我这个:

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

虽然来自设置 - > sdCard&手机存储, 我获得了37Mb的内部可用空间。

这种需要的全部意义在于 与权限相关。

我需要拥有INSTALL_PACKAGES权限
我知道通过把我的申请放在那里,
在/ system / app中,我获得了许可。

14 个答案:

答案 0 :(得分:53)

我可以通过以下步骤将APK安装到/system/app

  1. 将APK推送到SD卡。

    $ adb push SecureSetting.apk /sdcard/  
    
  2. 进入控制台并获取shell

    $ adb shell
    
  3. 切换到超级用户。如果您的设备未植根,请先将其设置为root。 (如果你不知道如何做到这一点,那就是谷歌。)

    $ su 
    
  4. 使用WRITE权限重新安装系统分区。

    $ 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. /system分区重新调回READ-ONLY,然后退出

    $ mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system
    $ exit
    
  7. 然后重新启动您的设备,APK应该已安装在/system/app

答案 1 :(得分:6)

通常,访问“/ system /”目录的唯一方法是使设备生根。我不知道是否需要模拟器。这可能是你的问题。

答案 2 :(得分:3)

如果您要为Android 5.0或更高版本的设备安装系统apk,请执行以下步骤。对于旧版本,请使用posaidong的答案

将您的apk文件重命名为base.apk

$ adb push base.apk /sdcard/  

进入控制台并获取shell

$ adb shell

切换到超级用户。如果您的设备未植根,请先将其设置为root。 (如果你不知道如何做到这一点,那就是谷歌。)

$ su 

使用WRITE权限重新安装系统分区。

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

在/ system / app文件夹中创建一个Test目录。 (或者也可以使用/ system / priv-app)。理想情况下,此文件夹名称应为应用程序名称现在,让我们使用Test

$ mkdir /system/app/Test 

此目录需要755权限

$ chmod 755 /system/app/Test 

将你的base.apk复制到

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

将Remout /系统分区返回READ-ONLY,然后退出

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

此目录需要644权限

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

$ exit

重新启动您的设备。启动完成后,您应该看到系统消息,如Android更新...

答案 3 :(得分:2)

设置 - > sdCard&手机存储说关于/ data文件夹。

/ system是单独安装的,我想除非你自己制作Android版本,否则无法写入。

通过运行

查看安装
adb shell

# df

答案 4 :(得分:1)

您需要先运行adb remount,然后才能让adb push转到/system个文件夹

答案 5 :(得分: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/.

答案 6 :(得分: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

然后重启设备

答案 7 :(得分:0)

您必须以读/写方式挂载系统,然后推送应用程序。

在这个问题中回答了这个问题:Push .apk to /system/app/ in HTC HERO

答案 8 :(得分:0)

即使在adb remount之前,您也应该更改adb shell中/ system的权限。 您可以使用chmod更改权限。

答案 9 :(得分:0)

如果你的apk足够小,可以推进,那么再试一次。我遇到了同样的问题并尝试了两次将apks推送到/ system / app /

答案 10 :(得分:0)

显然,“/ system”mount中的应用程序空间不足。您可以使用“adb shell df”命令检查它。

要解决此问题,您需要在启动AVD时充分设置partition-size参数,如下所示:

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

答案 11 :(得分:0)

检查你是否有足够的inode,你可能有足够的内存但没有足够的inode,即文件占位符。

答案 12 :(得分:0)

我在将apk文件复制到/system分区时多次遇到过这种情况,最终可以使用以下步骤解决它:

  • 使用 adb shell 中的 df 检查/system分区中的免费空间。很可能自由空间小于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 获取每个文件夹的大小&amp; /system分区中的文件。按照大小的降序排列输出以获得(类似的东西):

    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权限并使用 mount -o rw,remount / system 在读写模式下重新安装/system分区

答案 13 :(得分:-3)

如果您只想安装它,可以随时执行:adb install myApk.apk