[How to] Gmail and the Android Market
THIS METHOD IS NOW OUTDATED.
For everyone that is starting from scratch with a wiped NookColor, I have made a linux script available that will do everything for you. This includes enabling apk installs on the device, live wallpapers, multitouch, etc. It will also download and install YouTube, Gmail, and the Market. It also changes the Market fingerprint to that of a Droid Eris on Verizon so you can see protected apps. It does not require use of the Android Emulator to generate an AndroidId as this is done automatically thanks to clockworx. All it does require is that you be nootered and have working Superuser.
These steps are what worked for me and some may not even be required. If this guide needs any clarification, post a reply and I will do my best to update it. I'm 99% certain all the steps are here.
If you have already tried to get the Market or other Gapps working, etc then it is very likely you will have to do a full factory reset before this will work for you. I have no idea why, but if these steps don't work I would try that first.
In my experience the factory reset is two steps:
8 failed boots restores the /system partition. You can easily trigger this reset without 8 failed boots by running this command from a Linux or Mac OSX command line:
echo -n -e "\008\000\000\000" > /tmp/foo; adb push /tmp/foo /rom/devconf/BootCnt; adb reboot
Booting while holding power+volumeup+nook button restores /data
I had to do both of these steps in this order to get a full reset on the device.
system.img for AVD
Youtube for Eclaire
Root Explorer really speeds this up. If you have it, I recommend using it as this tutorial is written with it in mind.
* Copy nc_gapps.zip onto the 4gb internal partition of the NC, /media/
* Unmount both the internal partition and the SD card (if applicable) from within your OS but leave the USB cable connected.
* Using a command prompt on your OS, navigate to android-sdk/tools (or platform-tools in newer SDK) and type the following:
mount -o rw,remount -t ext2 /dev/block/mmcblk0p5 /system <-----This can be also done by going to /system/ in Root Explorer and clicking "Mount R/W" at the top
miniunz -x nc_gapps.zip -d /system/ <-----Overwrite [A]ll if prompted!
echo "ro.config.nocheckin=no" >> /system/build.prop
* Leave this command prompt open, we will need it in a minute!
* Install Youtube App. If you have a previous version installed it's best to use Titanium Backup to wipe it's data then uninstall.
* Run Youtube. Press Menu->My Channel. Log in with Gmail account. If you get the authentication error here you can try rebooting and wiping Youtube data again with Titanium Backup.
* Reboot NC
* Using the command prompt on your OS from before, type:
adb pull /data/system/packages.xml
*In this file find the string "uid.system". You should find a line that looks like:
<shared-user name="android.uid.system" userId="1000">
Remove the 3 lines beneath this one. They should look similar to:
<cert index="n" />
n is an integer that may be different for everyone. After removing these lines, the line immediately after "<shared-user...>" should be "<perms>"
* Using the command prompt on your OS:
adb push packages.xml /data/system/
Reboot NC and disconnect USB.
Gmail should work but running the Market should load the TOS after which you will get a server error. This is caused by our device not having a valid androidId. Let's generate a valid androidId using the AVD emulator.
Create a new AVD for Android 2.1-API Level 7 using these settings:
SD Card Size: 100M
Skin: Built-in: Default (HVGA)
Abstracted LCD Density: 160
Touch-screen support: yes
Device RAM size: 1024
Once the AVD is in your list, click on it and then click Details on the right hand side. Note the path and move the system.img you downloaded in that directory.
Start the AVD. When prompted, sign in with your existing Gmail credentials. Use CTRL+F11 to slide the keyboard in and out when prompted.
Run this command to get the androidId from the emulator:
adb shell sqlite3 /data/data/com.google.android.googleapps/databases/accounts.db "select * from meta";
It's the long number after androidId|, SAVE IT!
Now, connect your NC back to USB.
On the third command below, be sure to replace ANDROID_ID_FROM_EMULATOR with the number I just told you to save.
adb pull /data/data/com.google.android.googleapps/databases/gls.db
update meta set intvalue='ANDROID_ID_FROM_EMULATOR' where name='androidId';
adb push gls.db /data/data/com.google.android.googleapps/databases/