How can I push my application package to Android emulator \"/system/app\" folder?
I\'ve already tried to use:
\"adb push myApk.apk /system/app\"
and it giv
I have come across this situation multiple times while copying apk files to /system
partition and could finally resolve it using the following steps:
Check the Free space in /system
partition using df from adb shell. Most probably the Free space would be less than size of apk file.
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
Use du /system to get sizes of each folder & file in /system
partition. Arrange the output in descending order of size(s) to get (something similar):
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
...
Delete unnecessary files from /system/voice/embedded
, /system/tts/lang_SMT
(for language/locale support) and/or other folders to free enough space in /system
partition to accommodate the new apk file. Deleting files in partitions other than /system
may not help in this scenario. (N.B.: This step may require ROOT privileges and remounting /system
partition in read-write mode using mount -o rw,remount /system)
These are the steps if you are installing a system apk for Android 5.0 or later devices. For older versions use posaidong's answer
Rename your apk file to base.apk
$ adb push base.apk /sdcard/
Enter the console and get the shell
$ adb shell
Switch to superuser. If your device is not rooted, get it rooted first. (If you don't know how to do that, just Google.)
$ su
Remount the system partition with WRITE permission.
$ mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
Create a Test directory inside /system/app folder. (or can use /system/priv-app as well). Ideally this folder name should be application name. For now, lets use Test
$ mkdir /system/app/Test
Requires 755 permission for this dir
$ chmod 755 /system/app/Test
Copy your base.apk inside
$ cat /sdcard/base.apk > /system/app/Test/Base.apk
Remout /system partition back to READ-ONLY, and exit
$chmod 644 /system/app/Test/Base.apk
Requires 644 permission for this dir
$ mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system
$ exit
Reboot your device. When boot completes you should see a system message like Android updating ...
Check that you have enough inodes, you may have enough memory but not enough inode i.e. file placeholder.
The following batch file will install any apk files in the folder to the /system/app directory. It mounts the system drive as rw, then copies the files over.
To use it, put the following code into a text editor and save it as install.bat on a Windows machine. Then double-click on the batch file to install any APK files that are in the same folder as the batch file.
NOTE: You can't remount the system partition unless you have root on the device. I've mostly used this on the emulator which defaults to root (And was the original question), but the concept should be the same on a physical device.
@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/.
Normally, the only way to get access to the "/system/" directory is to have a device rooted. I don't exactly know if that is required for the emulator though. That could be your issue.
Even before adb remount
you should change the permissions for the /system in the adb shell.
you can use chmod
to change the permissions.