Sunday, January 6, 2013

SUPPORT NOTES Android Script Permissions

http://forum.xda-developers.com/showthread.php?t=1660596


Chapter 1: Finding the cause of the bootloop

Bootloops are mainly caused because system files interfering with each other which causes instability and/or crashes at the boot sequence.
To find the cause of a bootloop you have to think about what you did before getting the bootloop.
Choose one of the following reasons that caused the bootloop for you and try out its solution.

- After flashing a new rom

If you flash a new (base)rom with odin your /data will be kept. This means your old dalvik-cache will be used for the new system files which would result in a bootloop, to fix this problem:

1. Start your phone in CWM Recovery
2. Go to Advanced
3. Choose "Wipe dalvik-cache"
4. Now go to "Mounts & Storage"
5. Choose "Wipe /cache"
6. Reboot your phone

if the problems still exists after doing that and you're sure it's not related to the rom, then you need to do this:

1. Start your phone in CWM Recovery
2. Now go to "Mounts & Storage"
3. Choose "Wipe /data"
4. Choose "Wipe /cache"
5. Reboot your phone


- After restoring a system only backup

This one is actually the same as the above one, since only /system is restored (advanced restore) there is an incorrect dalvik-cache present which will cause the bootloop. perform the same steps as above to solve the problem.


- After installing a Mod / Theme or UOT Kitchen output

When you install a Mod / Theme or UOT Kitchen output and you get a bootloop, you know there is something wrong with the file that you are installing. This is mostly caused by an incorrect BaseROM of the mod/theme, but can also happen if the creator just didn't create it properly.
Wiping dalvik-cache won't be enough to fix this, you will need to open the zip on your computer and look at the files that are installed with the mod/theme. you can do this by looking into the system folder in the zip, there you can find the files that are being installed. for example:

You have installed an Extended Power Menu mod but it causes a bootloop, here is what you do:

1. Open the installation zip with Winrar (Extended Power Menu in this case)
2. Now look inside the "system" folder, in my case I found the framework folder inside the system folder
3. The framework folder contains: android.policy.jar & framework-res.apk, so these are the suspicious files.
4. What you simply do is searching for the original files (from your (base)rom) and drag them into the framework folder (inside winrar)
5. Now it will ask for a compression level, choose "Store" and the archive will be done in seconds.
6. You will need to put the file on your external sdcard using the "Mount USB Storage" option in CWM under "Mounts & Storage"
7. Install the zip just as you did with the mod, you should now be bootloop free, if not reinstall the zip with a mounted /system (Mounts & Storage > Mount /system) (and you can optionally wipe /cache and /dalvik-cache, this will never harm any file/setting.

Q: Ok... but I have no external sdcard.. how to fix it then?
A: Have a look at the "Using ADB as solution" chapter


- After setting wrong permissions

Android is very dependent on the right permissions, if you adjust file permissions incorrectly you could get a bootloop, giving a file to less permissions would break it, but also giving a file to much permissions would break it. most common permissions of system files are:

- 644 (RW-R-R) - (this is best known system permission, it exists in /system/app, /system/framework, /system/etc, /system/lib and allot of seperate files)
- 755 (RWX-RX-RX) - (mainly used for /system/bin)
- 777 (RWX-RWX-RWX) - (used for scripts inside /system/etc/init.d and busybox files)

An easy fix is performing the "Fix permissions" option in CWM under Advanced. be sure to mount the partitions before running the fix. Although this doesn't cover all permissions. have a look at the CWM or ADB chapter to find the solution.



Chapter 2 Using a CWM ZIP as solution

Using the original cwm zip is the easiest way, since the zip is already created for you, you only need to replace the files with the original rom files. You can get those files from the deodex packages for baseroms which are posted on the forums. If you are using an odexed ROM, you can get your files from system.img.ext4 (open the baserom: *.tar.md5 with Winrar and extract system.img.ext4)
Now you can open system.img.ext4 with "DiskInternals Linux Reader". browse to the app/framework directory and extract the needed files from the image file.

Once you got the same files as present in the original CWM zip you can easily drag em into the archive, then choose "store" as compression level. Now finally you need to put it on your sdcard and install it.

If you don't have an external sdcard or you can't reach your internal sdcard (which is very likely when you have a bootloop), you can use ADB to push the zip to your phone, read about how to use ADB in Chapter 3.


Commands for updater-script (located in CWMFIX.zip/META-INF/com/google/android/)

Mount & Install

To mount the system partition:
mount("ext4", "EMMC", "/dev/block/mmcblk0p15", "/system");

To extract the system folder in your zip:
package_extract_dir("system", "/system");

Setting Permissions

To set permissions of an individual file:
set_perm(0, 0, Mod, "File here");

A working example:
set_perm(0, 0, 0644, "/system/build.prop");

To set permissions of a directory:
set_perm(0, 0, Mod, "Dir here without a trailing slash");

Setting Permissions Recursively

To set permissions to all files inside a directory (resursive):
set_perm_recursive(0, 0, 0755, Mod, "Dir here without a trailing slash");

A working example:
set_perm_recursive(0, 0, 0755, 0777, "/system/etc/init.d");






Chapter 3 Using ADB as solution

ADB can be used to access the phone while booting, be aware that some bootloops make it unable to use ADB since they do not go further then the samsung logo.
The only tricky part about using ADB with bootloops is that you have to do it on the right time, this is just after the Galaxy S Plus logo, so just when the bootanimation starts. The easiest way to enter your phone in this part is using a batch script that monitors the state of your device and connects directly when possible.

I use this script for example (requires adb.exe and the 2 dlls)

Code:

@echo off
cd /d %~dp0
echo.
echo Waiting for device...
adb wait-for-device
echo.
adb -d shell stop
adb push mycwmfix.zip /sdcard/mycwmfix.zip
adb reboot recovery

This script will wait for the device to become ready, when it's ready it freeze the device, so the script has more time to push the file (instead of keep rebooting). Then it will push the specified cwmfix zip to your sdcard, and after that it will reboot in recovery so you can install the cwm fix you made.


You can also make an batch script that pushes the files automatically to your phone, here is an example:

Code:

@echo off
cd /d %~dp0
echo.
echo Waiting for device...
adb wait-for-device
echo.
adb -d shell stop
adb -d shell su -c "mount -o remount rw /system"
adb push framework-res.apk /system/framework/framework-res.apk
adb -d shell chmod 644 /system/framework/framework-res.apk
adb push SystemUI.apk /system/app/SystemUI.apk
adb -d shell chmod 644 /system/app/SystemUI.apk
adb reboot

This script will wait for the device to become ready, when it's ready it freeze the device, so the script has more time to push the file (instead of keep rebooting). Then it will push framework-res.apk and SystemUI.apk to the directory it belongs to, after that it changes the permissions of the files to RW-R-R (644) and then it will reboot.

No comments:

Post a Comment