I am trying to follow the tutorial :
http://borkweb.com/story/setting-etchosts-on-an-android-emulator-using-a-mac
But when I type:
adb -s emulator-5554 remount
All I get is remount of /system failed: Read-only file system
So then I try this..
MAC-M-N20B:~ user$ adb shell
root#generic_x86:/ # su
root#generic_x86:/ # mount -o rw,remount,rw /system
And then I get this...
mount: Read-only file system
Any ideas how I can make the system folder writeable?
I want to change my android emulator sdcard read only permission, for that I typed
mount -o remount,rw /mnt/sdcard
in adb shell. But it shows
Usage: mount [-r] [-w] [-o options] [-t type] device directory
Whats the problem in the command I have written in the adb shell.
I think you must write something like this:
mount -o remount rw /sdcard
Working on a root script for the Nexus 4 with the latest stock rom .img for google (occam) and I have the following code snippet:
./adb wait-for-device
echo "remounting system"
./adb shell "mount -o remount,rw /system"
./adb push su /system/bin/
echo "pushing super user"
./adb push Superuser.apk /system/app/
echo "pushing busybox"
./adb push busybox /system/xbin/
./adb shell "chmod 06755 /system/bin/su"
./adb shell "chmod 0644 /system/app/Superuser.apk"
./adb shell "chmod 04755 /system/xbin/busybox"
./adb shell "cd /system/xbin"
./adb shell "busybox --install /system/xbin/"
I keep getting the error
mount: Operation not permitted
failed to copy 'su' to '/system/bin//su': Read-only file system
pushing super user
failed to copy 'Superuser.apk' to '/system/app//Superuser.apk': Read-only file system
pushing busybox
failed to copy 'busybox' to '/system/xbin//busybox': Read-only file system
Unable to chmod /system/bin/su: No such file or directory
Unable to chmod /system/app/Superuser.apk: No such file or directory
Unable to chmod /system/xbin/busybox: No such file or directory
/system/bin/sh: busybox: not found
I've tried using multiple methods of obtaining r/w access, but nothing seems to be working. I have to automate this process due to the fact that other people will use the script so it needs to be automation friendly, but I just can't figure this out.
I've also tried the
#su
#mount
#mount | grep system
followed by inputting the partition with the system mount and changing it to r/w access, but that also hasn't worked.
Really frustrated at this point. Can anyone help?
It gives the error because you aren't root. The system partition is mounted read-only. You can try to push the binary to /data/local/tmp. Then you can make su executable and eventual run it. But it doesn't mean you can have root. To become root you need to push an exploit like psneuter to /data/local/tmp and run it. It crashes the shell and reopen a new one with root rights. Then you can remount the system-partition read-write and install su.
Try the commands below
adb shell "su -c mount -o remount,rw /system"
adb shell "su -c chmod 06755 /system/bin/su"
and so on.
how to give write permission to system/app folder
i have rooted my android device
i want to download the app and install in system/app folder
Process p = Runtime.getRuntime().exec( "su" );
i had tried this command it ask for user permission and then it throws exception
system/app is read only file system
First go to shell using
adb shell
Then remount the system folder as writable using following commands
$ su
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
Then change the permission of system folder to Read, Write and Execute using
# chmod 777 /system/app
Just type in your android device terminal
su
and then
chmod 777 system/app
su- grants you superuser permission
and chmod 777 file, change the permissions of the file to read, write, and execute..
Try adb remount in terminal.
If you want to do it from the device shell, see this question on how to remount the file system with write permission.
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 gives me this:
"failed to copy: ... No space left on device"
Although from settings -> sdCard & Phone Storage,
I get 37Mb of internal free space.
The whole point of this need is
related to permissions.
I need to have INSTALL_PACKAGES permission
and I know that by puting my application there,
in /system/app, I get that permission.
I can install an APK to /system/app with following steps.
Push APK to SD card.
$ adb push SecureSetting.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
Cat your APK from /sdcard/ to /system/ , some guys get a fail with cp command due to cp is not supported. So use cat instead.
$ cat /sdcard/SecureSetting.apk > /system/app/SecureSetting.apk
Remout /system partition back to READ-ONLY, and exit
$ mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system
$ exit
Then reboot your device, the APK should have been installed on /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.
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 ...
settings -> sdCard & phone storage says about /data folder.
/system is mounted separately and I guess there is no way of writing there unless you make your own Android build.
See mounts by running
adb shell
# df
You need to run adb remount first, then it should let you adb pushto /system folders
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)
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/.
Use below commands from your super user ADB shell. Copy the APK of your APP into your SD card or Internal Storage.
$ 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
Then reboot the device
You have to mount system as read/write and then push the application.
This is answered in this question: Push .apk to /system/app/ in HTC HERO
Even before adb remount you should change the permissions for the /system in the adb shell.
you can use chmod to change the permissions.
If your apk is smaller enough to push in, then try some times again. I met the same problem and tried twice to push the apks to /system/app/
Apparently, there is not enough space for your application in "/system" mount. You can check that with "adb shell df" command.
To solve this issue, you need to set partition-size parameter adequately while starting your AVD like this:
emulator.exe -avd <your avd name> -partition-size 512
Check that you have enough inodes, you may have enough memory but not enough inode i.e. file placeholder.
If you're simply looking to install it, you can always do: adb install myApk.apk.