Posts Tagged Android

HOWTO :: Send and receive MMS on Galaxy Nexus / SoftBank

As usual, MMS support in the international version of Galaxy Nexus does not work on SoftBank network as is, and requires a bit of tinkering. We gonna need usual toolset: phone, USB cable, adb, apktool and a text editor. There are a few explanations on the web, but they talk about connecting Nexus to the iPhone APN, so it won’t work if your previous smartphone was not iPhone. Here’s a procedure if you had Android device before.

Copy files from the phone

$ adb pull /system/app/Mms.apk
$ adb pull /system/framework/framework-res.apk

Unpack the framework and Mms.apk

$ apktool if framework-res.apk
$ apktool d Mms.apk

Make changes

The file we are interested in is res/xml/mms_config.xml, you may want to change it directly, but your phone might stop working on some other network, so I prefer another approach. We can create separate file, which will work on SoftBank network only. This new file should be called res/xml-mcc440-mnc20/mms_config.xml, 440 is the country code for Japan, and 20 is SoftBank network. The file contents is the following:

<?xml version=”1.0″ encoding=”utf-8″?>
<mms_config version=”4″>
<bool name=”enabledMMS”>true</bool>
<int name=”maxMessageSize”>307200</int>
<int name=”maxImageHeight”>768</int>
<int name=”maxImageWidth”>1024</int>
<int name=”defaultSMSMessagesPerThread”>500</int>
<int name=”defaultMMSMessagesPerThread”>150</int>
<int name=”minMessageCountPerThread”>10</int>
<int name=”maxMessageCountPerThread”>5000</int>
<string name=”uaProfUrl”>http://www.google.com/oha/rdf/ua-profile-kila.xml</string>
<int name=”recipientLimit”>-1</int>
<int name=”smsToMmsTextThreshold”>4</int>
<bool name=”enableMultipartSMS”>false</bool>
<bool name=”enableSlideDuration”>true</bool>
<int name=”maxMessageTextSize”>-1</int>
<string name=”userAgent”>SoftBank/1.0/X01T/TJ001</string>
</mms_config>

You should not copy/paste the code snipped, just change the bold parts (URL and UserAgent) using your phone file as a boilerplate.

Rebuild .apk

First we run apktool to rebuild the resource files, and then zip contents of build/apk folder and sign the result

$ apktool b Mms
$ cd Mms/build/apk
$ zip Mms.apk *
$ java -jar signapk.jar -w testkey.x509.pem testkey.pk8 Mms{,-signed}.apk

Put results back to the phone

If you phone does not allow pushing files to /system/app, you have to download and use Superboot (see my previous post for details. Otherwise, its as simple as:

$ adb push Mms-signed.apk /system/app/Mms.apk
4760 KB/s (434346 bytes in 0.089s)
$

After reboot, please, don’t forget to input proper APN settings for Open SoftBank.

Downloads

Just in case you don’t like to tinker with Android internals, here’s a ready-to-use download, SBM_Galaxy_Nexus_4.0.2_ICL53F_Mms.apk. This file should be put into your phone as described in “Put results back to the phone” part. It is intended to be used on Android 4.0.2, specifically version ICL53F, and may not work on other versions. As soon as I upgrade to 4.0.4, I will put a new file for download in this topic as well. Well, here’s SBM_Galaxy_Nexus_4.0.4_IMM76I_Mms.apk for version 4.0.4. And also SBM_Galaxy_Nexus_4.1.1_JRO03C_Mms.apk for Jelly Bean 4.1.1.

Final thoughts

There is still one problem left, Mms.apk requires working internet data connection to download MMS contents. As I have remembered from my previous HTC phone, it was possible (on Froyo) to keep data connection off, and Mms application will enable it for a short period of time just to download MMS messages. Unfortunately, this does not work on Galaxy Nexus yet.

, ,

No Comments

HOWTO :: Pull OTA upgrade file from Galaxy Nexus

Recently I’ve got Galaxy Nexus to play with, and as soon as I’ve entered Wi-Fi password, an OTA upgrade came my way. It was very tempting to upgrade immediately, but I’ve decided to pull upgrade file from the device to see what’s inside.

Unfortunately, the phone comes from the factory locked and there’s no way to access system files except unlocking the protection.

Regarding the root access

First we need the root access to be able to access files freely.

I don’t like to permanently root my phone, so I prefer the temporary method, which keeps the phone protected, but gives me the opportunity to access what I need if I really need it (I do not delve into details about how to use adb, hoping you already know that).

Unlock the phone

Reboot into fastboot mode by switching power off, and holding all three buttons (volume up/down and power) until Android logo appears. then issue ‘fastboot oem unlock’ command from your computer. This requires full memory wipe, so be careful and make a backup of any data you care to keep.

Download the superboot

Superboot is the bootoader image, which can turn the phone into a rooted one, but only until the next reboot. Handy and safe.

Reboot into superuser-enabled mode

While still in fastboot mode, the following command will restart the phone with the boot image we have just downloaded.

fastboot boot boot.superboot.img

Wait until the update comes

Since the phone was wiped clear during unlock, we have to wait again for upgrade to come, or request the upgrade check from Settings menu, if you are impatient.

Move upgrade file into the easy to access place

Since adb can not pull system files, we have to move the upgrade file somewhere we can access easily. I chose /sdcard folder for that purpose

adb shell
$ su
# cd /cache
# ls
[... file list skipped ...]
# mv signed-yakju-ICL53F-from-ITL41F.0927b42c.zip /sdcard/

In your case the file name most probably will be different, but it’s quite easy to tell based on size (90MB in my case), which file to copy.

Extract the file from the phone

Finally we can use adb to get the file:

adb pull /sdcard/signed-yakju-ICL53F-from-ITL41F.0927b42c.zip .

, , , ,

No Comments

Auto-Update-Apk :: Automatic Update Deployment for Android Applications

auto-update-apk logo

First, I had an application. And a customer. And another customer. Actually, a few people wanted to use the application, but due to a specific nature of the software it is not intended for Joe Public, and I’m quite reluctant to put it on the Market.

Then comes the problem: I can tell the customer to install the program from a given URL, but how do I deploy updates to the software? Unfortunately, Android Market does not provide update options for non-Market applications.

I’ve spent a few days looking for an automatic update deployment software on the net. Found a few. Most of them are just plain disappointments. So,I’ve decided to spend a weekend to roll my own. Maybe also a disappointment, but at least my own.

Finally, today I’ve published the first version of AutoUpdateAPK service. Due to gruesome death of the service I’ve used before, I was quite pressed for time, so the basic functionality is a bit limited, but is expected to grow rapidly. Especially, because we are going to use this service ourselves quite extensively.

Android code is open-sourced under Apache 2.0 license, so people may freely copy it into their applications and start to deploy updates automatically.

, ,

No Comments

Ainol NOVO7 :: Google Applications package for ICS 4.0.1

The official version of 4.0.1 software does not include google applications for some reason, so I had to search the internet and prepare the update package. The software, which requires binary libraries, is not included (TTS + Sound Recognition, Face Lock, Video Editor), also Google Earth is gone because it’s just too big.

Everything else is packed, signed and can be easily installed on native 4.0.1 without any rooting or CWM hackery. Just copy the file as update.zip to your microSD and press “volume+/power” to start the update process.

NOVO7B-GoogleApps-ICS-update-signed.zip (27MB)

MD5: 733c58b23db53ca9188888e8edc1f317

  • installs using native recovery
  • works with official ICS 4.0.1 version
  • requires about 13MB of empty space on /system (usually about 15M are free)
  • includes gmail, exchange, maps, latitude, news, talk, market, youtube, Latin IME
  • does not include Chinese IME, Earth, TTS + Sound Recognition, Face Lock, Video Editor
  • does not require CWM or rooting for installation

, , ,

No Comments

Ainol Novo 7 :: $99 ICS Android 4.0 tablet with MIPS processor


Chinese company “Ainol” have released Novo 7 — sub-$100 7″ tablet with Ice Cream Sandwich (Android 4.0) and MIPS processor. This is quite big step aside from previous ARM-powered models, and the price speaks for itself. MIPS and ARM are different beasts, but Ainol have already got Google Compatibility Certificate and endorsement by Andy Rubin, so it looks like most Android software runs just fine on the new tablet.

Screen size is standard 800×480, capacitive touch screen, HDMI output and everything else is just as expected.

I’ve already ordered one on ebay for ¥11,320 JPY (including delivery), and hope to get it before holidays.

, ,

No Comments

Mail/parcel tracker — now with Sagawa and Kuroneko Yamato support


Two other major delivery services are supported now by mail tracker: Sagawa Takkyubin (佐川宅急便) and Kuroneko (ヤマト運輸), but it’s still as simple as it was before — just enter the number and the program will automatically check and decide where and how to track it. Barcode scanner works now almost always, success rate is about 95% even in extreme lighting conditions. It takes only 2-5 seconds to scan a receipt and get all the tracking info available on the screen. If you send a lot of mail you know how troublesome and time consuming this might be.

Here’s version 0.9.7 (still beta, but improving quite fast and steady): 配送追跡.

, ,

No Comments

Japan Post mail/parcel tracker

Got some spare time and made a little application for Android, which helps to check the current status of my mail and packages right from my phone. Actually I’ve tried a few other similar applications first, but haven’t found the one which works just as I like. Most of them don’t support barcode scanning and don’t validate input, so I could input any garbage instead of tracking number (you know how error prone is touch-typing =) and then spend hours wondering why my parcel does not show up in the tracking list. Another thing I don’t like is to choose every time what kind of number I have, Expack or cash on delivery/registered mail — they all look very similar written on the paper.

My application (配送追跡) takes the number and selects the proper category automatically, also it calculates checksum for every number and rejects anything that fails validation. Took me a few hours to reverse engineer checksum calculation for Japan Post tracking numbers, but finally it works, and, by some strange coincidence, same validation scheme is used for Sagawa (佐川宅急便) and Kuroneko (ヤマト運輸) express delivery tracking numbers, so maybe I’ll add support for those in the future.

There are still a few kinks to iron out, and current barcode scanning library from “ZXing team” gave me mixed results on my phone, but people say it’s the best one and the actual problem is in my phone, so I hope it works well for you.

And, please, don’t worry about the kanji on the screenshot — the program will display everything in English if you phone has non-japanese locale set.

,

No Comments

HOWTO :: Archos 70 ddms/adb connection

It’s fun to play with Archos 70, but eventually comes the development time. Since Archos 70 is not officially supported by Google, “adb devices” gives empty list and “ddms” does not see it either.

1. First step is to find out the maker/model code.

$ lsusb
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 013: ID 0e79:1411 Archos, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

2. I thought “android update adb” will get the job done, but got no results here. Then I’ve just manually added the maker code to .android/adb_usb.ini file.

$ nano .android/adb_usb.ini
# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE 'android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.
0x0E79

It’s a good idea to kill adb server at first. Then “adb devices” starts to see the tablet, but could not access it propely.

$ adb kill-server
$ adb devices
List of devices attached
???????????? no permissions

3. It’s time to assign proper permissions for the USB device

$ sudo nano /etc/udev/rules.d/53-android.rules
SUBSYSTEM=="usb", SYSFS{idVendor}=="0E79", MODE="0666"

Well, this time everything works just fine:

$ adb devices
List of devices attached
A70-6A920022-9FF80000-0160C5C6-14015009 device

And I could even snap a screen capture with “ddms”.

, ,

3 Comments

Archos 70 :: first impressions

Yesterday I’ve got 7″ Archos 70 tablet from HK for about 20.000yen. They also had 10″ model with 1024×600 screen, but I already have an iPad and was looking for something a tad smaller. The delivery took about 3 days by FedEx.


Archos 70 has Android 2.2 (Froyo) installed, along with the WiFi (802.11/b-g-n) support. After asking all the usual questions about time zone and keyboard, it connected to the internet and offered to download and install the fresh firmware. Firmware installation does not run on the battery power and requires the external power supply, which it quite smart. There are Japanese/Chinese screen interface options, but since I’ve chosen English as the default language, I’ve got only european keyboards available.

Screen resolution is 800×480, like on my HTC Desire, but the actual size is about 3 times bigger, which makes it very easy to see every small detail on the Google Maps. 8Gb are installed (16Gb for 10″ model) as internal memory for movies and music, and less than hundred megabytes are available on the system partition for the software installations. Since there’s also an microSD slot available, the memory size it not very important and I can easily add up to 32Gb more. Upper panel has the microphone, VGA-quality video cam for video calls over internet and two speakers with reasonable good sound, especially considering their size.


On the side panel there are 1)microUSB connector, 2)microSD slot, 3)headphone jack, 4)microHDMI connector and 5)power supply connector.

It’s a bit unexpected, Archos 70 battery cannot be charged over an USB cable. Probably it’s somehow related to the USB-host support for external HDD and other devices. Still, the universal (100-240V) power supply is included and has support for most wall outlets over the world — Japanese, European and American plugs are included.

Because of some political issues (absence of GPS/phone calls support?) the Archos 70 did not get the Google’s blessing and does not have Android Market support right from the box. However, Google Market and Gmail/Latitute/other software can be downloaded from the internet and installed separately. Soon after that I’ve got fresh Andry Birds running without any problems.

Internet support is outstanding, Archos 70 can see twice as many AP from my apartment, compared to the iPad. Application download speed is great. Youtube works very smoothly. All my home servers and computers were detected automatically and I can easily (unlike the iPad) browse and watch movies and listen to the music. Even the 720p movies work totally flawlessly over the WiFi connection. Most video/audio formats are suported just from the box, and new codecs can be downloaded from the Archos web-site.


Tablet body is made from plastic, very thin and very light — I can easily hold it with one hand for hours. HDMI connector allows to bring video to the large TV screen, and not only video but the other screen contents — icons and running software too.

GPS is missing together with the phone support. However, Archos 70 can find it’s location based on the WiFi spots around — it has marked my apartment on the map within 100m of the actual location. I understand it might not work everywhere, but for the people with wireless network at home and at work, who even eat only where they have WiFi access it should work reasonably well.

The screen is bright enough for indoor use. Viewing angle it not very wide, but it’s not a TV set — I can always align it the way I like. Before the screen turns off to sleep, it dims a little at first — a very nice feature, especially when reading news, a few seconds are enough to touch the screen and prevent it from sleeping. There’s also “deep sleep” mode which not only slows down the processor and turns the screen off, but stops the device totally — even alarm clocks and background tasks go down. Can be a great battery saver, though I haven’t tried this mode yet.

All in all, if you are looking for an Angry Birds-compatible tablet, which can be used to browse internet and to watch movies on the couch, I’d recommend this (or the 10″ model, if you are not going to put it in the pocket and try to use it somewhere else or bring along for a stroll).

,

No Comments

HOWTO :: repack and sign ROM image update .zip files

DISCLAIMER: I don’t invent anything new here, but just summarise things I’ve read across different forums and web sites. I did not write any software mentioned here, but only copy the files and made them available in one easy to access place. I use the procedure described here to create ROM images I flash to my HTC Desire phone, and so far it worked for me perfectly. However I do not guarantee it will work on your system with your files and your phone — use it at your own risk and assume all responsibility. REFLASHING YOUR PHONE MIGHT GET IT BRICKED AND MIGHT VOID YOUR WARRANTY.

Prerequisites

To be able to follow this explanation you will need the basic understanding of the command line, be able to enter commands with the parameters, to walk from one folder to another, to compile programs and to run the resulting binaries. To run Java programs you’ll need Java SE runtime installed. To compress and uncompress files you’ll need “zip” program or something similar.

Your phone should be rooted beforehand or allow the installation of custom ROMs.

The Outline

The process of creating your own ROM update file is not very complicated. Basically it consists of three steps:

  1. Download and unpack the image you like
  2. Make the necessary changes
  3. Pack and sign the .zip file

The update can contain as much as the full system + boot + radio + recovery + extras, which completely overwrites everything you have in your phone, or as little as single .apk file if you want to make just small changes.

Download and unpack

There are plenty of images available on the internet, it’s in your best interest to find the one as much similar to what you need to reduce the necessary changes and introduce as few problems as possible. There are three types of images you may use:

  1. RUU images (.exe)
  2. OTA images (.zip)
  3. 3rd party .zip images

RUU images contain full system, including radio, system, boot and the whole nine yards. However you’ll need to unpack .exe file into .zip file before doing anything useful. I have explanation how to extract the .zip file in Linux but if you use Windows or MacOS your procedure might be different.

OTA images usually contain only the difference between the previous software version and the current one. Therefore you’ll need the previous software as RUU/.zip file with the exact version, and be familiar with bspatch utilty to apply patches, which is quite tedious process. I don’t usually use OTA files if there are any other options available.

.zip images are the easiest to work with, just unpack with your zip archiver to the folder you like.

If you have started with RUU image, you’ll have system.img, boot.img and radio.img files. System image can be further unpacked with unyaffs (requires compilation) to another folder, usually “system/”. Boot image can be unpacked with the perl script (requires perl to be installed on your computer) also to another folder, usually “boot/”. Radio images cannot be unpacked and are better to be left alone.

Make the changes

Most of the changes are done to the system image, which contains all software and data files visible on the phone. Boot image should be changed only if you have deep linux knowledge to modify linux kernel and related matters.

If you have unpacked system image and made some changes, the system.img file is supposed to be moved somewhere else, so it’s not used anymore. Same with the boot.img file. All other files (hboot, recovery) are usually not used, because they might lead back to unrooting the phone and should be deleted or moved as well.

If you have based your work on RUU file, you’ll have to create META-INF folder with the correct information and update scripts inside. If you have unpacked someone’s .zip, the META-INF folder should be already present. Update script might mention some files in the update, so if you have removed (or added new) files, the update script should be amended to reflect those changes. Please, get a few images from different developers and try to understand the correct internal structure.

Pack and sign .zip file

Once you’ve made all the changes, you may change to the folder where you extracted all files, it might now contain .img files, like boot.img and radio.img as well as folders, like “system/”. Zip everything together with the command:

zip -r9 update.zip *

-r9 tells the program to collect files recursively and use the maximum compression. If you omit “r”, the subfolders will not be included (bad, bad idea!), if you omit “9″ nothing bad will happens, but resulting file might be about 1% larger.

To sign zipped file you should download SignApk.zip (requires Java), there are three files inside:

  • SignApk.jar is a tool included with the Android platform source bundle.
  • testkey.pk8 is the private key that is compatible with the rooted recovery image
  • testkey.x509.pem is the corresponding certificate/public key

and the signing command looks like this:

java -jar signapk.jar testkey.x509.pem testkey.pk8 [update.zip] [update-signed.zip]

update-signed.zip can be copied to the phone and installed using the traditional recovery procedure. Personally I’d recommend “ClockworkMod Recovery” from Koush and Paul O’Brien, but I’m not sure if it is available for your phone.

Finally

While the actual creation of your own ROM update file is not very complicated, the devil is in the changes you make. Most ROM updates fail at first try, please, have a fresh nandroid backup ready at all times.

, , , , , ,

No Comments