I've bought a used HTC Magic with CyanogenMod 5 on it. It has Google Market. The market version is 1.713 - which is nowhere near the latest IIRC. In-app billing, for one thing, is not supported.
Isn't Google Market supposed to upgrade itself when a new version comes out? Why doesn't mine do so? Probably some kind of CyanogenMod interference. Any good way around that, please?
EDIT: debugged the situation a little bit. I happen to know that market updating happens out of the main Market process - the Market (com.android.vending) downloads the update, then fires a broadcast intent UPDATE_MARKET to a receiver in another app (com.android.vending.updater), which in turn installs the package. Here's what I got in the LogCat:
02-01 02:34:16.155: W/ActivityManager(121): Permission Denial: broadcasting Intent { act=com.android.vending.UPDATE_MARKET dat=content://downloads/download/31 } from com.android.vending (pid=1762, uid=10006) requires com.android.vending.permission.UPDATE_MARKET due to receiver com.android.vending.updater/com.android.vending.updater.UpdateMarketReceiver
So it looks as if the Market app lacks a permission to invoke the updater. The manifest file of Vending.apk, however, does have a
<uses-permission android:name="com.android.vending.permission.UPDATE_MARKET" />
line. How is it possible for an app to have a <uses-permission>
, but receive a permission denial message?
EDIT2: the permission com.android.vending.permission.UPDATE_MARKET is marked as "signature" in the MarketUpdater manifest. Meaning only apps signed by the same certificate as MarketUpdater are granted that permission. That could be the reason Market is not granted the permission - could be signed by a different certificate.
EDIT3: that's exactly the case. The public key is different. The one on Vending.apk seems to match that on various versions of Vending.apk that are floating around the 'Net.