[Acer Iconia A500] shchers:
1. Preparing environment and building

1.1. Installing bootloader and recovery

This step can be done only in Windows (can be done on Linux too, but I didn't find right version of Linux nvflash):

Run MS Windows (tested even on Windows 7) on host PC

Download this package (Size=12592367 MD5=EA890A3B3E1CEDBBD820D1A798A365A2). Inside package:

Windows drivers for nVidia USB device

nvflash tool and required libraries

Unlocked bootloader, see details here

Batch for automatic update, see original batch here

Generate your SBK with your CPUID by this link

Connect tablet to PC through USB

Turn-off tablet

Press and hold reset button on tablet

Press power and wait until new USB device will be detected

Install USB drivers (can be find in package)

Run script run.bat and follow recommendations

1.2. Downloading sources and building Android

Create directory for AOSP sources

mkdir aosp && cd aosp

Initializing repo

repo init -u [url]https://android.googlesource.com/platform/manifest[/url] -b ics-mr1

Downloading sources

repo sync

Download sources of Acer Picasso device

git clone git://github.com/shchers/afs_device_acer_picasso.git device/acer/picasso

Download sources of MBM RIL library

git clone git://github.com/shchers/afs_vendor_mbm_mbm-ril.git vendor/mbm/mbm-ril

Download sources of MBM GPS library

git clone git://github.com/shchers/afs_vendor_mbm_libmbm-gps.git vendor/mbm/libmbm-gps

Download sources of MBM GPS service

git clone git://github.com/shchers/afs_vendor_mbm_mbmservice.git vendor/mbm/mbmservice

Setting-up build environment

source build/envsetup.sh

Configuring target (Acer A500/A501 == full-picasso)

lunch full_picasso-userdebug

Building with using all available CPU cores

m -j`grep -c processor /proc/cpuinfo`

2. Installing Android to device

2.1. Updating through CWM recovery

2.1.1. Creating update archive

Go to target output directory

cd ${ANDROID_PRODUCT_OUT}

Create folder for updater script. Run in console:

mkdir -p META-INF/com/google/android

Copy updater script there

show_progress(0.400000, 0);
ui_print("> Formating system partition");
format("ext4", "EMMC", "/dev/block/mmcblk0p3", "0");
ui_print("> Mounting system partition");
mount("ext4", "EMMC", "/dev/block/mmcblk0p3", "/system");
ui_print("> Extracting system directory");
package_extract_dir("system", "/system");
ui_print("> Creating symlinks");
show_progress(0.200000,0);
symlink("Roboto-Bold.ttf", "/system/fonts/DroidSans-Bold.ttf");
symlink("Roboto-Regular.ttf", "/system/fonts/DroidSans.ttf");
symlink("mksh", "/system/bin/sh");
symlink("toolbox",
"/system/bin/ls","/system/bin/mount","/system/bin/cat",
"/system/bin/ps","/system/bin/kill","/system/bin/ln",
"/system/bin/insmod","/system/bin/rmmod","/system/bin/lsmod",
"/system/bin/ifconfig","/system/bin/setconsole","/system/bin/rm",
"/system/bin/mkdir","/system/bin/rmdir","/system/bin/reboot",
"/system/bin/getevent","/system/bin/sendevent","/system/bin/date",
"/system/bin/wipe","/system/bin/sync","/system/bin/umount",
"/system/bin/start","/system/bin/stop","/system/bin/notify",
"/system/bin/cmp","/system/bin/dmesg","/system/bin/route",
"/system/bin/hd","/system/bin/dd","/system/bin/df",
"/system/bin/getprop","/system/bin/setprop","/system/bin/watchprops",
"/system/bin/log","/system/bin/sleep","/system/bin/renice",
"/system/bin/printenv","/system/bin/smd","/system/bin/chmod",
"/system/bin/chown","/system/bin/newfs_msdos","/system/bin/netstat",
"/system/bin/ioctl","/system/bin/mv","/system/bin/schedtop",
"/system/bin/top","/system/bin/iftop","/system/bin/id",
"/system/bin/uptime","/system/bin/vmstat","/system/bin/nandread",
"/system/bin/ionice","/system/bin/touch","/system/bin/lsof");
ui_print("> Applying permissions");
set_perm_recursive(0, 0, 0755, 0644, "/system");
set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");
set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");
set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");
set_perm(0, 0, 0755, "/system/etc/bluetooth");
set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf");
set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf");
set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");
set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");
set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");
set_perm(0, 0, 0544, "/system/etc/install-recovery.sh");
set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");
set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor");
set_perm(0, 0, 0644, "/system/vendor/fake.txt");
show_progress(0.200000, 10);
package_extract_file("boot.img", "/dev/block/mmcblk0p2");

NOTE: Don't rename file! It should be updater-script!

Download this archive (Size=149342 MD5=9497D5087FEF04C1EA4EE215A3DC83B8) and extract there

Create ZIP archive. Run in console:

zip -r9 full-pack.zip boot.img system META-INF

Generate keys. Run in console:

openssl genrsa -out key.pem 1024
openssl req -new -key key.pem -out request.pem
openssl x509 -req -days 3650 -in request.pem -signkey key.pem -out certificate.pem
openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 -nocrypt

Run signing archive. Run in console:

java -jar ${ANDROID_HOST_OUT}/framework/signapk.jar certificate.pem key.pk8 full-pack.zip full-pack-sign.zip

2.1.2. Using CWM recovery

Upload full-pack-sign.zip on FAT32 formated microSD card

Turn-off tabled

Insert microSD

Press Power button while hold Volume Down button

Release Power button when you'll see text in top left corner, some like "cleaning cache partition..."

From opened menu select "wipe data/factory reset"

Select "Yes -- delete all user data"

Press on "install zip from sdcard" menu

Select "choose zip from sdcard"

In this menu select "full-pack-sign.zip"

After installing press "Go back"

Press "reboot device"

2.2. Updating through Android debug

2.2.1. Updating system partition

Get a root access

adb root && adb wait-for-device

Remount system partition with R/W permitions

adb shell mount -o remount,rw -t ext4 /dev/block/mmcblk0p3 /system/

Sync binaries

adb shell stop && adb sync && adb reboot

2.2.2. Updating boot partition

Reboot to fastboot

adb reboot bootloader

Select one of possible methods to use new boot partition

Boot with custom kernel and ramdisk without flashing (boot partition will not be rewrote) - this mode useful for debugging kernel/root

fastboot boot ${ANDROID_PRODUCT_OUT}/kernel ${ANDROID_PRODUCT_OUT}/ramdisk.img

Boot with custom boot.img without flashing (boot partition will not be rewrote) - this mode also can be used for debugging kernel/root

fastboot boot ${ANDROID_PRODUCT_OUT}/boot.img

Flashing new boot.img to boot partition

fastboot flash:raw boot ${ANDROID_PRODUCT_OUT}/kernel ${ANDROID_PRODUCT_OUT}/ramdisk.img

2.3. Enabling Google services

To enable Google services on new system, should be copied several Google binaries to /system/app. To do it should b done several steps:

Get a root access

adb root && adb wait-for-device

Remount system partition with R/W permitions

adb shell mount -o remount,rw -t ext4 /dev/block/mmcblk0p3 /system/

Download this (i.e. GAPPS) archive (Size=16449776 MD5=C7E6FAAFE7223A17DE93DD1D7A968734)

Extract it somewhere

mkdir GooglePack && cd GooglePack
unzip googlepack.zip

Stop dalvik virtual machine

adb shell stop

Upload APK files

for f in `ls *.apk`; do echo "Uploading $f" && adb push $f /system/app/; done

Remove Provision.apk - it looks like setup wizard, but SetupWizard.apk much powerful

Reboot device to recovery and wipe data partition (use CWM "Wipe" menu for it)

adb reboot recovery

Reboot device after wiping

Use wizard on system start-up to configure your account

Use Android Market to install GMail and other apps

3. Debugging

3.1. RILD

To see rild log should be done:

adb logcat -b radio

4. FAQ

5. Supported features

2D/3D acceleration

Photo/Video Camera

2G/3G

GPS

AGPS

SMS (tested only in GSM networks)

WiFi

Bluetooth

Audio/Video playback

Image viewing

External SD Card

External USB storage

Compass

Gyroscope

6. To do

[rild] Add support for USSD

[rild] Add support/check for MMS

[libsensors] Implement libsensors and replace Acer binaries

[audio] Add support for USB audio devices

[audio] Add support for modem audio input

7. Screenshots

Version

EDGE connection

Speed test results on HSDPA+

8. Pre-builds

Build #1 (Size=114409141 MD5=11C9E0BE468B21BF061C7ECF6673C9B4)

Build #2 (Size=119899802 MD5=4CB798A28B38D02217752C6E09F0E226)