Last Updated on Dec 26, 2022
Make ADB localhost Work on Your Jelly Bean 4.2.2 DeviceIn Jelly Bean 4.2.2, ADB now uses RSA keys to explicitly allow certain clients. This poses a problem when attempting to use ADB on your phone locally and the ADB daemon won’t write its RSA key to disk due to the file system being read-only. This is the easiest way to make it work.
Disclaimer: I am not responsible for you doing this wrong and breaking your phone.
This will not work on Android 4.1.2 or older.
- Make /data/.android.
- Do one of the following:
- If you’re using a custom ROM with init.d, put the following into an init.d script.
#!/system/bin/sh if [ ! -e "/.android" ]; then busybox mount -o rw,remount / mkdir /.android mount -o bind /data/.android /.android busybox mount -o ro,remount / fi
- If you have hacked in init.d support by hooking the debuggerd binary, add the script above to your debuggerd script *or* an init.d script.
- If you’re using a custom ROM with init.d, put the following into an init.d script.
- Reboot the device (if you used option 2 in the previous step, restart the debugger (“stop debuggerd; start debuggerd“)).
After the phone boots completely, check /.android for contents. If it’s empty, restart usb debugging (either from Developer Options (toggle USB Debugging off and back on) or via the command line (“stop adbd; start adbd“)). There should now be stuff in /.android.Append the contents of /.android/adbkey.pub to /data/misc/adb/adb_keys (“cat /.android/adbkey.pub >> /data/misc/adb/adb_keys; echo “” >> /data/misc/adb/adb_keys“).-
Start the ADB server on the phone from the command line using ADB on your PC or a terminal emulator.
root@android:/ # adb start-server
- The phone should pop the authentication dialog – click OK. If the authentication dialog doesn’t pop, follow the striked out steps above.
Edit [08/02/2014]: Turns out two of the above steps aren’t required. Steps amended above.
Notes:
- Don’t delete /data/.android or the contents therein.
- Tested on my SGS4 with hacked-in init.d support.
- You can also find the abdkey.pub file on your Windows’ PC here, C:\Users\[user name]\.android\abdkey.pub. Copy it to your device, then append it to /data/misc/adb/adb_keys and you won’t need to initially use the USB to allow the PC connection.
Before:
root@android:/ # adb shell ls * daemon not running. starting it now on port 5038 * * daemon started successfully * error: device offline 255|root@android:/ #
After:
root@android:/ # adb shell ls * daemon not running. starting it now on port 5038 * * daemon started successfully * MSM8960_lpm.rc acct cache carrier charger config d data data_1 data_2 data_3 default.prop dev efs etc extSdCard file_contexts firmware firmware-mdm fstab.qcom init init.carrier.rc init.goldfish.rc init.qcom.class_core.sh init.qcom.class_main.sh init.qcom.early_boot.sh init.qcom.lpm_boot.sh init.qcom.rc init.qcom.ril.sh init.qcom.sh init.qcom.syspart_fixup.sh init.qcom.usb.rc init.qcom.usb.sh init.rc init.target.rc init.trace.rc init.usb.rc mnt mnt_1 persdata preload proc property_contexts res root sbin sdcard seapp_contexts sepolicy storage sys system tombstones ueventd.goldfish.rc ueventd.qcom.rc ueventd.rc vendor root@android:/ #