Android Market対応自作アプリをapktoolでPlayストアに対応させる
昨日 Android Market が Google play とやらに統合された影響で URL が変わったんだよ!
具体的に言うと
が、
https://play.google.com/store/apps/details?id=jp.r246.twicca
こうなったわけです。古い URL にアクセスするとリダイレクトされちゃう!
別件で調査してた関係で作った https://market.android.com/details のインテントを受け取ったら market://details に変換して再度インテントを飛ばすアプリが反応しなくなっちゃったよ?
左が「market.android.com」を受け取った様子。右が「play.google.com」を受け取った様子。
余計なことすんな Google !!
Tweet ボタンを押してみんなに教えて上げようとしても Play ストアになってない人はマーケットアプリで開けないだろ!!
よろしいならば対応だ。
元のファイルはこれ(署名してないので端末にインストールは出来ません)
http://dl.dropbox.com/u/6407977/MarketRedirector/MarketRedirector.apk
んで、apktool d MarketRedirector.apk MarketRedirector とかしてバラします。
今回弄るのは AndroidManifest.xml だけです。
<?xml version="1.0" encoding="utf-8"?> <manifest android:versionCode="1" android:versionName="1.0" package="jp8796.marketredirector" xmlns:android="http://schemas.android.com/apk/res/android"> <uses-sdk android:minSdkVersion="10" /> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher"> <activity android:label="@string/app_name" android:name=".MarketRedirectorActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" android:host="market.android.com" android:pathPrefix="/details" /> <data android:scheme="https" android:host="market.android.com" android:pathPrefix="/details" /> </intent-filter> </activity> </application> </manifest>
これを
<?xml version="1.0" encoding="utf-8"?> <manifest android:versionCode="1" android:versionName="1.0" package="jp8796.marketredirector" xmlns:android="http://schemas.android.com/apk/res/android"> <uses-sdk android:minSdkVersion="4" /> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher"> <activity android:label="@string/app_name" android:name=".MarketRedirectorActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" android:host="market.android.com" android:pathPrefix="/details" /> <data android:scheme="https" android:host="market.android.com" android:pathPrefix="/details" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" android:host="play.google.com" android:pathPrefix="/store" /> <data android:scheme="https" android:host="play.google.com" android:pathPrefix="/store" /> </intent-filter> </activity> </application> </manifest>
こう。
intent-filter を追加してるだけでプログラム部分は一切弄ってません。
理屈としては反応する URL を増やしたよ!っておはなしです。
あ、元のアプリが minSdkVersion=10 で作っちゃたので 4 に書き換えてますがこれで Android 1.6 でも動くのかな?みたいな。
んで、 apktool b MarketRedirector とかして組み立てて dist の中に MarketRedirector.apk ができましたとさ。インストールしたければ適当に署名してくださいまし。
ね、簡単でしょ?
ちなみにプログラム部分のソースはこんなん。
public class MarketRedirectorActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); if(Intent.ACTION_VIEW.equals(getIntent().getAction())){ Uri uri = getIntent().getData(); String url = "market://details?id=" + uri.getQueryParameter("id"); uri = Uri.parse(url); Intent i = new Intent(Intent.ACTION_VIEW,uri); startActivity(i); } finish(); } }
検証用なのでエラー処理とか一切考慮していないのですが気にしないでください。