diff --git a/AndroidBoard.mk b/AndroidBoard.mk deleted file mode 100755 index 3ffb57d..0000000 --- a/AndroidBoard.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -ALL_PREBUILT += $(INSTALLED_KERNEL_TARGET) - -# include the non-open-source counterpart to this file --include vendor/emulator/twrp/AndroidBoardVendor.mk diff --git a/BoardConfig.mk b/BoardConfig.mk index e2a13ad..3bc6298 100755 --- a/BoardConfig.mk +++ b/BoardConfig.mk @@ -35,11 +35,13 @@ TARGET_PREBUILT_KERNEL := device/emulator/twrp/kernAl # Use this flag if the board has a ext4 partition larger than 2gb BOARD_HAS_LARGE_FILESYSTEM := true -TARGET_RECOVERY_INITRC := device/emulator/twrp/recovery/init.rc +#TARGET_RECOVERY_INITRC := device/emulator/twrp/recovery/init.rc TARGET_USERIMAGES_USE_EXT4 := true # TWRP specific build flags -DEVICE_RESOLUTION := 720x1280 +TW_THEME := portrait_mdpi RECOVERY_GRAPHICS_USE_LINELENGTH := true -TWRP_CUSTOM_KEYBOARD := ../../../device/emulator/twrp/recovery/hardwarekeyboard.cpp RECOVERY_SDCARD_ON_DATA := true +TW_EXCLUDE_MTP := true +# Dirty workaround to prevent errors related to the brightness file +TW_BRIGHTNESS_PATH := "/brightness" diff --git a/README.md b/README.md index 98a85d3..d0ccc76 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,11 @@ This is a set of device configs that you can use to build and test TWRP in the Android emulator. Note that adb will take about 10 to 15 seconds after TWRP is booted to become available. Just wait and it will come online eventually. -This branch of the device configs is intended to be used with Android 4.4.2 system image. For some reason there is no cache partition. In order to create a cache partition as well fake boot and recovery partitions, you will have to boot the emulator with a custom kernel. We added simply added support for reading a partition map to the kernel configuration. The source for this kernel is located here: +This branch of the device configs is intended to be used with Android 5.1.1 system image. In order to create fake boot and recovery partitions, you will have to boot the emulator with a custom kernel. We simply added support for reading a partition table to the kernel configuration. The source for this kernel is located here: [Kernel Source](https://android.googlesource.com/kernel/goldfish/+/android-goldfish-3.4 "Kernel Source") -To boot this in the emulator, build your recoveryimage. With the Android emulator make a new device based on a Galaxy Nexus. Name it TWRP. Allow it to have a hardware keyboard and a sdcard sized to 1500MB. Give it a decent sized data partition like 500MB or more. TWRP will be using the data partition as an emulated storage setup as seen on most modern Android devices, so having some extra room may help. Then from your android-sdk/tools folder run the following command: +To boot this in the emulator, build your recoveryimage. With the Android emulator make a new device based on a Galaxy Nexus. Name it TWRP. Allow it to have a hardware keyboard and a sdcard sized to 2000MB. Give it a decent sized data partition like 2000MB or more. TWRP will be using the data partition as an emulated storage setup as seen on most modern Android devices, so having some extra room may help. Then from your android-sdk/tools folder run the following command: ``` ./emulator -avd TWRP -ramdisk ~/omni_folder/out/target/product/twrp/ramdisk-recovery.img -kernel ~/omni_folder/device/emulator/twrp/goldfish_3.4_kernel @@ -14,7 +14,7 @@ To boot this in the emulator, build your recoveryimage. With the Android emulato After the first boot, wait for ADB to start up, then: adb shell /sbin/create_partitions.sh -This script will partition the sdcard with a boot, recovery, cache, and removable sdcard partition. It's designed to work with a 1500MiB sdcard. If you want a different sdcard size then you will need to modify the script in the omni_folder/device/emulator/twrp/recovery/root/sbin/create_partitions.sh location to suit your needs. +This script will partition the sdcard with a boot, recovery, cache, and removable sdcard partition. It's designed to work with a 2000MiB sdcard. If you want a different sdcard size then you will need to modify the script in the omni_folder/device/emulator/twrp/recovery/root/sbin/create_partitions.sh location to suit your needs. You can find a compiling guide for TWRP [here](http://forum.xda-developers.com/showthread.php?t=1943625 "Guide"). diff --git a/device.mk b/device.mk index b447dfc..c1cb431 100755 --- a/device.mk +++ b/device.mk @@ -17,10 +17,6 @@ endif PRODUCT_COPY_FILES += \ $(LOCAL_KERNEL):kernel -PRODUCT_COPY_FILES += \ - device/emulator/twrp/recovery/root/sbin/network_start.sh:recovery/root/sbin/network_start.sh \ - device/emulator/twrp/recovery/root/sbin/create_partitions.sh:recovery/root/sbin/create_partitions.sh - $(call inherit-product, build/target/product/full.mk) PRODUCT_NAME := teamwin_twrp diff --git a/recovery.fstab b/recovery.fstab index f463d82..2f7b286 100755 --- a/recovery.fstab +++ b/recovery.fstab @@ -1,8 +1,8 @@ # mount point fstype device -/external_sd vfat /dev/block/mmcblk0p4 /dev/block/mmcblk0 +/external_sd vfat /dev/block/mmcblk0p3 /dev/block/mmcblk0 /system ext4 /dev/block/mtdblock0 /data ext4 /dev/block/mtdblock1 length=-16384 -/cache ext4 /dev/block/mmcblk0p3 +/cache ext4 /dev/block/mtdblock2 /boot emmc /dev/block/mmcblk0p1 /recovery emmc /dev/block/mmcblk0p2 diff --git a/recovery/hardwarekeyboard.cpp b/recovery/hardwarekeyboard.cpp deleted file mode 100644 index 1e3d7bc..0000000 --- a/recovery/hardwarekeyboard.cpp +++ /dev/null @@ -1,435 +0,0 @@ -// hardwarekeyboard.cpp - HardwareKeyboard object -// Custom hardware keyboard support for Asus Transformer devices - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -extern "C" { -#include "../common.h" -#include "../minuitwrp/minui.h" -#include "../recovery_ui.h" -} - -#include "rapidxml.hpp" -#include "objects.hpp" -#include "../data.hpp" -#include - -HardwareKeyboard::HardwareKeyboard(void) { - // Do Nothing - DataManager::SetValue("Lshift_down", 0); - DataManager::SetValue("Rshift_down", 0); - DataManager::SetValue("last_key", 0); -} - -HardwareKeyboard::~HardwareKeyboard() { - // Do Nothing -} - -int HardwareKeyboard::KeyDown(int key_code) { - - int keyboard = -1; - int shiftkey, Lshift_down, Rshift_down; - - DataManager::GetValue("Lshift_down", Lshift_down); - DataManager::GetValue("Rshift_down", Rshift_down); - if (Lshift_down || Rshift_down) - shiftkey = 1; - else - shiftkey = 0; - -#ifdef _EVENT_LOGGING - LOGE("HardwareKeyboard::KeyDown %i\n", key_code); -#endif - switch (key_code) { - case KEY_LEFTSHIFT: // Left Shift - DataManager::SetValue("Lshift_down", 1); - return 0; - break; - case KEY_RIGHTSHIFT: // Right Shift - DataManager::SetValue("Rshift_down", 1); - return 0; - break; - case KEY_A: - if (shiftkey) - keyboard = 'A'; - else - keyboard = 'a'; - break; - case KEY_B: - if (shiftkey) - keyboard = 'B'; - else - keyboard = 'b'; - break; - case KEY_C: - if (shiftkey) - keyboard = 'C'; - else - keyboard = 'c'; - break; - case KEY_D: - if (shiftkey) - keyboard = 'D'; - else - keyboard = 'd'; - break; - case KEY_E: - if (shiftkey) - keyboard = 'E'; - else - keyboard = 'e'; - break; - case KEY_F: - if (shiftkey) - keyboard = 'F'; - else - keyboard = 'f'; - break; - case KEY_G: - if (shiftkey) - keyboard = 'G'; - else - keyboard = 'g'; - break; - case KEY_H: - if (shiftkey) - keyboard = 'H'; - else - keyboard = 'h'; - break; - case KEY_I: - if (shiftkey) - keyboard = 'I'; - else - keyboard = 'i'; - break; - case KEY_J: - if (shiftkey) - keyboard = 'J'; - else - keyboard = 'j'; - break; - case KEY_K: - if (shiftkey) - keyboard = 'K'; - else - keyboard = 'k'; - break; - case KEY_L: - if (shiftkey) - keyboard = 'L'; - else - keyboard = 'l'; - break; - case KEY_M: - if (shiftkey) - keyboard = 'M'; - else - keyboard = 'm'; - break; - case KEY_N: - if (shiftkey) - keyboard = 'N'; - else - keyboard = 'n'; - break; - case KEY_O: - if (shiftkey) - keyboard = 'O'; - else - keyboard = 'o'; - break; - case KEY_P: - if (shiftkey) - keyboard = 'P'; - else - keyboard = 'p'; - break; - case KEY_Q: - if (shiftkey) - keyboard = 'Q'; - else - keyboard = 'q'; - break; - case KEY_R: - if (shiftkey) - keyboard = 'R'; - else - keyboard = 'r'; - break; - case KEY_S: - if (shiftkey) - keyboard = 'S'; - else - keyboard = 's'; - break; - case KEY_T: - if (shiftkey) - keyboard = 'T'; - else - keyboard = 't'; - break; - case KEY_U: - if (shiftkey) - keyboard = 'U'; - else - keyboard = 'u'; - break; - case KEY_V: - if (shiftkey) - keyboard = 'V'; - else - keyboard = 'v'; - break; - case KEY_W: - if (shiftkey) - keyboard = 'W'; - else - keyboard = 'w'; - break; - case KEY_X: - if (shiftkey) - keyboard = 'X'; - else - keyboard = 'x'; - break; - case KEY_Y: - if (shiftkey) - keyboard = 'Y'; - else - keyboard = 'y'; - break; - case KEY_Z: - if (shiftkey) - keyboard = 'Z'; - else - keyboard = 'z'; - break; - case KEY_0: - if (shiftkey) - keyboard = ')'; - else - keyboard = '0'; - break; - case KEY_1: - if (shiftkey) - keyboard = '!'; - else - keyboard = '1'; - break; - case KEY_2: - if (shiftkey) - keyboard = '@'; - else - keyboard = '2'; - break; - case KEY_3: - if (shiftkey) - keyboard = '#'; - else - keyboard = '3'; - break; - case KEY_4: - if (shiftkey) - keyboard = '$'; - else - keyboard = '4'; - break; - case KEY_5: - if (shiftkey) - keyboard = '%'; - else - keyboard = '5'; - break; - case KEY_6: - if (shiftkey) - keyboard = '^'; - else - keyboard = '6'; - break; - case KEY_7: - if (shiftkey) - keyboard = '&'; - else - keyboard = '7'; - break; - case KEY_8: - if (shiftkey) - keyboard = '*'; - else - keyboard = '8'; - break; - case KEY_9: - if (shiftkey) - keyboard = '('; - else - keyboard = '9'; - break; - case KEY_SPACE: - keyboard = ' '; - break; - case KEY_BACKSPACE: - keyboard = KEYBOARD_BACKSPACE; - break; - case KEY_ENTER: - keyboard = KEYBOARD_ACTION; - break; - case KEY_SLASH: - if (shiftkey) - keyboard = '?'; - else - keyboard = '/'; - break; - case KEY_DOT: - if (shiftkey) - keyboard = '>'; - else - keyboard = '.'; - break; - case KEY_COMMA: - if (shiftkey) - keyboard = '<'; - else - keyboard = ','; - break; - case KEY_MINUS: - if (shiftkey) - keyboard = '_'; - else - keyboard = '-'; - break; - case KEY_GRAVE: - if (shiftkey) - keyboard = '~'; - else - keyboard = '`'; - break; - case KEY_EQUAL: - if (shiftkey) - keyboard = '+'; - else - keyboard = '='; - break; - case KEY_LEFTBRACE: - if (shiftkey) - keyboard = '{'; - else - keyboard = '['; - break; - case KEY_RIGHTBRACE: - if (shiftkey) - keyboard = '}'; - else - keyboard = ']'; - break; - case KEY_BACKSLASH: - if (shiftkey) - keyboard = '|'; - else - keyboard = '\\'; - break; - case KEY_SEMICOLON: - if (shiftkey) - keyboard = ':'; - else - keyboard = ';'; - break; - case KEY_APOSTROPHE: - if (shiftkey) - keyboard = '\"'; - else - keyboard = '\''; - break; - case KEY_UP: // Up arrow - keyboard = KEYBOARD_ARROW_UP; - break; - case KEY_DOWN: // Down arrow - keyboard = KEYBOARD_ARROW_DOWN; - break; - case KEY_LEFT: // Left arrow - keyboard = KEYBOARD_ARROW_LEFT; - break; - case KEY_RIGHT: // Right arrow - keyboard = KEYBOARD_ARROW_RIGHT; - break; - case KEY_BACK: // back button on screen - mPressedKeys.insert(KEY_BACK); - PageManager::NotifyKey(KEY_BACK, true); - return 0; - break; - case KEY_HOMEPAGE: // keyboard home button - case KEY_HOME: // home button on screen - mPressedKeys.insert(KEY_HOME); - PageManager::NotifyKey(KEY_HOME, true); - return 0; - break; - case KEY_SLEEP: // keyboard lock button - case KEY_POWER: // tablet power button - mPressedKeys.insert(KEY_POWER); - PageManager::NotifyKey(KEY_POWER, true); - return 0; - break; -#ifdef _EVENT_LOGGING - default: - LOGE("Unmapped keycode: %i\n", key_code); - break; -#endif - } - if (keyboard != -1) { - DataManager::SetValue("last_key", keyboard); - mPressedKeys.insert(keyboard); - if (!PageManager::NotifyKeyboard(keyboard)) - return 1; // Return 1 to enable key repeat - } else { - DataManager::SetValue("last_key", 0); - } - return 0; -} - -int HardwareKeyboard::KeyUp(int key_code) { - std::set::iterator itr = mPressedKeys.find(key_code); - if (itr != mPressedKeys.end()) { - mPressedKeys.erase(itr); - PageManager::NotifyKey(key_code, false); - } -#ifdef _EVENT_LOGGING - LOGE("HardwareKeyboard::KeyUp %i\n", key_code); -#endif - if (key_code == KEY_LEFTSHIFT) { // Left Shift - DataManager::SetValue("Lshift_down", 0); - } else if (key_code == 31) { // Right Shift - DataManager::SetValue("Rshift_down", 0); - } - return 0; -} - -int HardwareKeyboard::KeyRepeat(void) { - int last_key; - - DataManager::GetValue("last_key", last_key); -#ifdef _EVENT_LOGGING - LOGE("HardwareKeyboard::KeyRepeat: %i\n", last_key); -#endif - if (last_key) - PageManager::NotifyKeyboard(last_key); - return 0; -} - -void HardwareKeyboard::ConsumeKeyRelease(int key) { - mPressedKeys.erase(key); -} diff --git a/recovery/init.rc b/recovery/init.rc deleted file mode 100755 index 9a2b183..0000000 --- a/recovery/init.rc +++ /dev/null @@ -1,63 +0,0 @@ -on early-init - start ueventd - -on init - export PATH /sbin - export LD_LIBRARY_PATH .:/sbin - export ANDROID_ROOT /system - export ANDROID_DATA /data - export EXTERNAL_STORAGE /sdcard - - symlink /system/etc /etc - - mkdir /boot - mkdir /sdcard - mkdir /sd-ext - mkdir /datadata - mkdir /emmc - mkdir /system - mkdir /data - mkdir /cache - mount /tmp /tmp tmpfs - -on init - ifup lo - ifup eth0 - hostname localhost - domainname localdomain - - class_start default - -service ueventd /sbin/ueventd - critical - -#this starts the network needed to get adb working in the emulator -service network_start /sbin/network_start.sh - user root - oneshot - -on boot -service recovery /sbin/recovery - -service adbd /sbin/adbd recovery - disabled - -# Always start adbd on userdebug and eng builds -# In recovery, always run adbd as root. -on property:ro.debuggable=1 - write /sys/class/android_usb/android0/enable 0 - write /sys/class/android_usb/android0/idVendor 04e8 - write /sys/class/android_usb/android0/idProduct 6860 - write /sys/class/android_usb/android0/functions adb - #write /sys/class/android_usb/android0/enable 1 - write /sys/class/android_usb/android0/iManufacturer TeamWin - write /sys/class/android_usb/android0/iProduct TWRP - write /sys/class/android_usb/android0/iSerial $ro.serialno - #start adbd - setprop service.adb.root 1 - -# Restart adbd so it can run as root -on property:service.adb.root=1 - write /sys/class/android_usb/android0/enable 0 - restart adbd - write /sys/class/android_usb/android0/enable 1 diff --git a/recovery/root/brightness b/recovery/root/brightness new file mode 100644 index 0000000..e69de29 diff --git a/recovery/root/init.recovery.goldfish.rc b/recovery/root/init.recovery.goldfish.rc new file mode 100644 index 0000000..da6bdcb --- /dev/null +++ b/recovery/root/init.recovery.goldfish.rc @@ -0,0 +1,5 @@ +#this starts the network needed to get adb working in the emulator +service network_start /sbin/network_start.sh + user root + oneshot + default diff --git a/recovery/root/sbin/create_partitions.sh b/recovery/root/sbin/create_partitions.sh index cc97943..24fff12 100755 --- a/recovery/root/sbin/create_partitions.sh +++ b/recovery/root/sbin/create_partitions.sh @@ -13,19 +13,13 @@ parted -s /dev/block/mmcblk0 mklabel gpt parted -s /dev/block/mmcblk0 mkpart boot ext2 0 8MB # 8MB recovery partition parted -s /dev/block/mmcblk0 mkpart recovery ext2 8MB 16MB -# 34 MB cache partition -parted -s /dev/block/mmcblk0 mkpart cache ext2 16MB 50MB # sdcard partition -parted -s /dev/block/mmcblk0 mkpart sdcard ext4 50MB 1536MB - -echo "Formatting cache..." -# Format external_sd as vfat -make_ext4fs -S /file_contexts -a /cache /dev/block/mmcblk0p3 +parted -s /dev/block/mmcblk0 mkpart sdcard ext4 16MB 2048MB echo "Formatting external_sd..." # Format external_sd as vfat -mkdosfs /dev/block/mmcblk0p4 +mkdosfs /dev/block/mmcblk0p3 echo "Mounting new sdcard..." -mount -t vfat /dev/block/mmcblk0p4 /external_sd +mount -t vfat /dev/block/mmcblk0p3 /external_sd echo "Done!" diff --git a/recovery/root/sbin/network_start.sh b/recovery/root/sbin/network_start.sh index c00558c..2a1e5a9 100755 --- a/recovery/root/sbin/network_start.sh +++ b/recovery/root/sbin/network_start.sh @@ -1,73 +1,5 @@ #!/sbin/sh -# this was kanged from /system/etc/init.goldfish.sh -# we run it in the init.rc and it is required to get -# the network running in order for adb to work in -# emulator # Setup networking when boot starts ifconfig eth0 10.0.2.15 netmask 255.255.255.0 up route add default gw 10.0.2.2 dev eth0 - -# ro.kernel.android.qemud is normally set when we -# want the RIL (radio interface layer) to talk to -# the emulated modem through qemud. -# -# However, this will be undefined in two cases: -# -# - When we want the RIL to talk directly to a guest -# serial device that is connected to a host serial -# device by the emulator. -# -# - We don't want to use the RIL but the VM-based -# modem emulation that runs inside the guest system -# instead. -# -# The following detects the latter case and sets up the -# system for it. -# -qemud=`getprop ro.kernel.android.qemud` -case "$qemud" in - "") - radio_ril=`getprop ro.kernel.android.ril` - case "$radio_ril" in - "") - # no need for the radio interface daemon - # telephony is entirely emulated in Java - setprop ro.radio.noril yes - stop ril-daemon - ;; - esac - ;; -esac - -# Setup additionnal DNS servers if needed -num_dns=`getprop ro.kernel.ndns` -case "$num_dns" in - 2) setprop net.eth0.dns2 10.0.2.4 - ;; - 3) setprop net.eth0.dns2 10.0.2.4 - setprop net.eth0.dns3 10.0.2.5 - ;; - 4) setprop net.eth0.dns2 10.0.2.4 - setprop net.eth0.dns3 10.0.2.5 - setprop net.eth0.dns4 10.0.2.6 - ;; -esac - -# disable boot animation for a faster boot sequence when needed -boot_anim=`getprop ro.kernel.android.bootanim` -case "$boot_anim" in - 0) setprop debug.sf.nobootanimation 1 - ;; -esac - -# set up the second interface (for inter-emulator connections) -# if required -my_ip=`getprop net.shared_net_ip` -case "$my_ip" in - "") - ;; - *) ifconfig eth1 "$my_ip" netmask 255.255.255.0 up - ;; -esac - diff --git a/recovery/root/sepolicy b/recovery/root/sepolicy new file mode 100644 index 0000000..1cf1861 Binary files /dev/null and b/recovery/root/sepolicy differ