Michael's musings


This is a blog of
mcr at sandelman.ca

Mon, 18 Jul 2011

Eclipse and Android SDK never ran

I've had a problem getting Eclipse, and specifically the Android SDK to run on my Debian laptop for over a year now. I've generally just VNC'ed to a more powerful box and ran it there.

The problem I had was that most network operations in eclipse would fail with network unreachable. Not a big deal for day to day things, but you need the network to install the Android SDK kits and install Eclipse plugins.

I had been trying to strace things to figure out what it was, and finally found it:

connect(26, {sa_family=AF_INET6, sin6_port=htons(443), inet_pton(AF_INET6, "::ffff:74.125.95.91", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable)

Huh, it's doing IPv6 connections. GOOD. But, it hasn't set the right IOCTL on the socket to permit IPv4 mapped connections to work, and on Debian, the bindv6only is now not set.

See: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=560056



posted at: 20:51 | path: /android | permanent link to this entry

Mon, 03 Jan 2011

How can Research in Motion survive?

There are lots and lots of opinions in the media about whether or not RIM and it's flagship product, the Blackberry can survive. For instance, a quick google gives me: http://gigaom.com/apple/poking-holes-in-rims-anti-apple-rhetoric/

http://www.cbc.ca/technology/story/2010/07/14/rim-blackberry-6-annual-meeting.html

http://www.thestar.com/business/companies/rim/article/834957--rim-could-face-tough-questions-today

A friend and I discussed this over lunch the other day. We care only because as far as the Government of Canada's IT policy is concerned, they see RIM as a golden goose who can do nothing wrong. RIM is an endorsement for the government of canada's "IT policy" --- it's a sign of success: those of in the industry see it as more of a four-leaf clover. Something that was happened in Canada by chance, not by design.

Assuming that we wanted RIM to survive, what would we do as CEO?

We have a lot of challenges, and we think that many of them are internal, not external. The major one is the huge amounts of Not-Invented-Here (NIH). The second major issue is the degree to which RIM is the centre of the Blackberry world, with data from most models of phones going through expensive data centres for reprocessing. When the Blackberry first appeared, it did not have Internet connectivity, but rather worked through various proxy servers and HTML-reformatters. We were surprised that more people didn't ask questions when CIBC sued some former employes, and subpeoned emails from their BlackBerry.. Why was the subpeaona served to RIM? http://www.robhyndman.com/2005/01/06/cibc-sues-six-former-employees/ http://www.heydary.com/publications/blackberry-pin-monitoring.html

Today, it does better, but few developers really want to write apps for the Blackberry JavaMobileEdition. Android is seriously taking a lot of market.

What advantages does RIM have? Sure some patents about some user interface things (mostly physical stuff).

What it does have is a brand name, and Blackberry devices are considered serious status symbols. For instance,a salesperson I was meeting with explained to me that, "of course", his company offered to get him the latest BlackBerry, but he found the keyboard too small for his aging eyesight, and preferred to keep his 2 year old unit.

Along with this brand name is a pretty good email system with pretty good integration into Microsoft Exchange. This is something that Google and Apple does not have as well done. (Yes, Google has most of it, but they don't have the same level of trust from the right places, and many Microsoft IT fanboys hate Google, just on principle)

The problem that I see is that Blackberry has started to go after the consumer market, and with this, they are diluting the BlackBerry brand name. Used to be only big companies could get email integration, and only the important people had BlackBerrys. Now every second person on the bus has one... and they aren't even the cool people. The cool people have their own iPhone or Android. If a cool person has a BlackBerry, it is because their company made them take one because it integrated, but said person has their own phone for their real use.

So, my advice to RIM is as follows:

1) break up the company. Spin off BlackBerry hardware as private company. Have them make handsets under the BlackBerry name. Sell them for premium dollars. For about 18 months (one hardware design cycle), they can make BlackBerry OS units, but by mid-2012 they have to shipping Android as the base OS.

2) port all of BlackBerry's custom software to Android in native mode. (i.e. not Java). I do not think much of the core software on the Blackberry is written in Java Mobile (I could be wrong, it could all be JavaME now, but it wasn't a few years ago). Porting to native is probably easier, and may even make it easier for them offer some unique features.

Native mode code often requires a rooted phone to work well. In this case, it is a feature, not a bug: the target audience is not end users in some sense, but rather, carriers. If you can get BlackBerry Email on just ANY smartphone, then the carrier does not get a chance to charge more for this.

Many carriers have a BlackBerry plan which is different than just Internet, because they know that BlackBerry's can't run torrent clients.

3) create the RIM cloud, and go into competition with GMAIL, Rackspace's Mailtrust, etc. Offer strong integration into corporate email, and offer various DRM-ish controls on what can be done with email that is accessed via the native apps. (it's all pretend security of course, but many people seem to insist on drinking coolaid...)

What is the result?

  1. RIM is no longer competing on price at the low end. Rather they are using the existing low-end smartphone makes to drive corporate/carrier business to them.

    1. RIM's hardware spin-off is still making high-end, high-margin handsets for executives. This helps to return much of their status symbol. The new handsets should be easily distinguished from the old low-cost ones they used to make. (New colour? Breath-mint dispenser? ...)

      Since they are offering the same integrated apps on other vendor's phones, it means that the peons who need to be "integrated" no longer need BlackBerry handsets, and so nobody will confuse them with important people.

      1. RIM's communication cloud can expand into areas they have no yet been into. This is where the money is in the future. How about if executives can now approve expense reports/authorize-purposes from their units via digital signatures?

Will RIM do this? Unlikely. RIM will be Canada's Polaroid.



posted at: 22:36 | path: /android | permanent link to this entry

Fri, 25 Jun 2010

Android G1 broken Home button: software issue?

About 10 days ago my Android G1 (running on http://www.WINDmobile.ca) turned itself into a unitasking iPhone. The HOME key stopped working. I figured it was dirt in the case or something... until...

On the Android the HOME key, pushed once, brings you back to the main screen. If you hold it down, then it acts like a task bar (ALT+TAB for any windows readers) and lets you select a running app to switch to.

I realized that the screen would stop locking too! No pocket phone calls, but some actual pocket web surfing and the like. Very annoying.

I had been running http://www.cyanogenmod.com 4.2 on the phone since I started carrying a G1 in January. (I switched from the Rogers Dream to the T-Mobile Dream to get the right radio for WIND in April. I did that with a nandroid backup and restore...)

I was not running APPS2SD before, I had a 4G microSD card, which will plenty big for apps, since Meaghan's new phone needed an uSD card for her MPs, we each got 8G uSD cards. I meant to partition the 8G, flash up to CM 5.0 and run apps2sd.

I started this yesterday with a wonder... since booting with HOME key down is how you get into the recovery image... was I screwed if my HOME key was broken? MIRACLE, it works.

Yesterday, I did a nandroid backup on the 4G uSD card, and then did a factory wipe/reset. SURPRISE. HOME key works. It was somehow a software issue!

I then took the 4G uSD card, inserted it into my laptop, did a tar.gz copy of the contents of the disk, and then inserted the 8G uSD. I partitioned it as 2G for /sdcard, 1.5G (advice from google/forums) for apps, and a 4.5G ext3 partition for... other stuff. Since these partitions can show up on a laptop/etc.

I'll put some "away" SSH keys on it, and likely put some other stuff that never needs to be seen by a windows computer (which I don't own). I'm thinking about putting a copy of QEMU on the windows drive, along with a live x86 image, and maybe I can mount the ext3fs there directly? What happens if I put a copy of MSDOS.COM on it, or install grub on it... can I boot a random x86 PC from my phone right into Linux?

So I restored the /sdcard image from my tar.gz copy. I then discovered that my phone has already been DangerSPL'ed... nice. Thanks to the ebay guy that I bought it from... too bad he won't return my emails, because I'd thank him directly again.

CM5.0.8 installed, mostly without a problem. First app I re-installed was NewsRob and ConnectBot.

I found that I couldn't install apps however! I hooked up adb and found that the package manager couldn't create directories. It died with:

Couldn't create temp file for downloaded package file

After some investigation (including grep'ing the source tree), I found that my /data/app was a symlink to /system/sd/app, which didn't exist. I pointed the second place to /sd-ext, and commented on IRC. Nope, don't do that. Instead, /data/app needs to be recreated:

rm /data/app /data/app-private
mkdir /data/app /data/app-private
chown system:system /data/app /data/app-private

Hurray for Cyanogen!



posted at: 16:58 | path: /android | permanent link to this entry

Wed, 06 Jan 2010

no-op instructions for ARM

At http://www.credil.org/ we had to deal with some code that was not yet GPL compliant, fixing bugs (removing features!) from a .so file that we had. We had some of the source code, but not enough to recompile it.

We needed to disable certain calls, so we disassembled the object file with objdump -d. We then reviewed the code, looked for the calls we wanted to remove, which are "bl" instructions.

../../prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin/arm-eabi-objdump -d libmyso.so >libmyso.S

All branch instructions are conditional, but one valid condition is "branch always" (and link, which means it's a subroutine). See: http://www.peter-cockerell.net/aalp and http://www.peter-cockerell.net/aalp/html/frames.html, section C which is at: http://www.peter-cockerell.net/aalp/html/app-c.html

Just look, if we change 'e' to 'f', it becomes Branch Never! We tried that.

Oops, this doesn't work. Peter Cockerell's book (from 1987) documents ARMv3, and we are up to ARMv9. It seems that his bit pattern now means to branch, and change to THUMB mode... The clue that this is what happens is that when we disassembled the result we saw "blx", but the real clue was that the offset was no longer "place", instead was "place+2". Thumb instructions are 16-bit big.

See http://www.keil.com/support/man/docs/armasm/armasm_cihfddaf.htm for details of BLX.

So, how to create a NOP? We didn't see an official one. Some googling revealed that "MOV R0 R0" is a good choice.

http://www.keil.com/support/man/docs/armasm/armasm_cjafcggi.htm

To assemble this:

First nibble is 0b1110 (15, 0xE) for "Always".

Second nibble is 0b0001 (1, 0x1), for 00, Immediate bit = 0, first bit of opcode is 1. (The Opcode is 0b1101 (14, 0xD) for MOV)

Third nibble is 0b1010 (10, 0xA), three bits of opcode, S bit set to 0.

Fourth nibble is 0x0000 (R0), and Fifth nibble is 0x0000 (R0).

The last 12 bits are 0.

The result is: 0b1110 0001 1010 0000 0000 0000 0000 0000. Or 0xE1A00000.

We didn't realize that the Android phones are in big-endian mode, so when we searched for the right instructions to change, we did not find them.

When you objdump a .so file, it's mapped directly, so the offsets that objdump products are actual file offsets.



posted at: 03:11 | path: /android | permanent link to this entry

Fri, 06 Nov 2009

dumping list of active services

From the shell of your rooted android phone run:

# dumpsys activity.services
Currently running services:
  activity.services
-------------------------------------------------------------------------------
DUMP OF SERVICE activity.services:
Services in Current Activity Manager State:
  Active services:
  * ServiceRecord{43a3dca0 com.android.inputmethod.latin/.LatinIME}
    intent={act=android.view.InputMethod cmp=com.android.inputmethod.latin/.LatinIME}
    packageName=com.android.inputmethod.latin
    processName=com.android.inputmethod.latin
    permission=android.permission.BIND_INPUT_METHOD
    baseDir=/system/app/LatinIME.apk/system/app/LatinIME.apk dataDir=/data/data/com.android.inputmethod.latin
    app=ProcessRecord{43a3e670 660:com.android.inputmethod.latin/10002}
    isForeground=false lastActivity=-296633
    startRequested=false startId=0 executeNesting=0 executingStart=-296565 crashCount=0
    totalRestartCount=0 restartCount=0 restartDelay=0 restartTime=-296633 nextRestartTime=-329523
    * IntentBindRecord{43a3e110}:
      intent={act=android.view.InputMethod cmp=com.android.inputmethod.latin/.LatinIME}
      binder=android.os.BinderProxy@4392a698
      requested=true received=true hasBound=true doRebind=false
      * Client AppBindRecord{43a3e288 ProcessRecord{439c0190 572:system/1000}}
        Per-process Connections:
          ConnectionRecord{43a3e400 com.android.inputmethod.latin/.LatinIME:@43a3da60}
    All Connections:
      ConnectionRecord{43a3e400 com.android.inputmethod.latin/.LatinIME:@43a3da60}

  Connection bindings to services:
  * ConnectionRecord{43a3e400 com.android.inputmethod.latin/.LatinIME:@43a3da60}
    binding=AppBindRecord{43a3e288 com.android.inputmethod.latin/.LatinIME:system}
    conn=android.app.ActivityThread$PackageInfo$ServiceDispatcher$InnerConnection@43a3da60 flags=0x1

If you run it without any arguments, you get a big huge dump of all sorts of interesting things. I do not yet know how to get it to give me a list of just the services that have registered themselves, or are actively running.



posted at: 13:46 | path: /android | permanent link to this entry


XML


February
Sun Mon Tue Wed Thu Fri Sat
      4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      
2012
Months
FebMar
Apr May Jun
Jul Aug Sep
Oct Nov Dec