OcoToOoの備忘録
2014年2月2日日曜日
2013年11月19日火曜日
AndroidのapkのAndroidManifestを編集してリコンパイルする方法
前提
どこかしらから入手したapkがあるとする。
android sdkのplatform-toolsにpathを通してある。
- apktoolから以下の2つのファイルをダウンロードしてくる。
・apktool1.5.2.tar.bz2(2013/11/19時点)
・apktool-install-linux-r05-ibot.tar.bz2(2013/11/19時点) - 2つのファイルを解凍する。
$bzip2 -dc apktool1.5.2.tar.bz2 | tar xvf -
$bzip2 -dc apktool-install-linux-r05-ibot.tar.bz2 | tar xvf -
それぞれディレクトリ構成は、
・apktool
/apktool1.5.2/apktool.jar
・apktool-install-linux-r05-ibot
/apktool-install-linux-r05-ibot/aapt
/apktool-install-linux-r05-ibot/apktool - apktool.jarとapktoolを同一ディレクトリに格納。
ついでにapktoolを分かりやすいようにapktool.shとかにrenameしておく。
ここでは、ディレクトリを/home/xxx/apktool/とする。
・/home/xxx/apktool/apktool.jar
・/home/xxx/apktool/apktool.sh - apkをデコンパイルする
上記のディレクトリにapkをおいて以下のコマンドを実行
$./apktool.sh d old.apk
するてと apkがデコンパイルされ、old ディレクトリが作成される。 - AndroidManifest.xmlを修正する。
old ディレクトリの中にあるAndroidManifest.xmlを思うがままに修正する。 - コンパイルする
以下のコマンドを実行
$./apktool.sh b old new.apk
するてと new.apk が作成される。 - apkに署名する
署名に必要な非公開鍵の生成と管理を行うにはkeytoolが必要。
keytoolを使ったキーストアファイル(.keystore)の作成と非公開鍵(=キー)の生成の仕方は省略。知りたい方はこちらのページへ。
ってことで、.keystoreを使って以下のコマンドで署名を行う。
jarsigner -sigalg SHA1withDSA -digestalg SHA1 -verbose -signedjar <署名後のapk名> -keystore <キーストアファイルへのパス> <署名前のapk名> <キーストアのalias>
するてと、無事署名されたapkが出来上がる。 - おわり
2013年9月18日水曜日
AndroidでWeb Browserで開いているWebページからアプリのインストール状態によってアプリもしくわGooglePlayを開く
1.とりあえず飛ばしちゃう手法
参照元
何やっているかというと、とりあえずアプリに飛ばしちゃってみて、
アプリがインストールされていなかったら、すぐ戻ってくるので、
ある一定時間以内に戻ってきたらGoogle Playに飛ばしちゃうっていう手法。
上2つは、document.locationにアプリURI設定して、ページを遷移させている。
下2つは、iframeのsrc属性にアプリURI設定して、ページを遷移させるのは回避している。
2. anchorのhref属性にAndroid Intentを設定する方法
AndroidのChromeが、vesrion25以降で、アプリがインストールされていなかったら、すぐ戻ってくるので、
ある一定時間以内に戻ってきたらGoogle Playに飛ばしちゃうっていう手法。
上2つは、document.locationにアプリURI設定して、ページを遷移させている。
下2つは、iframeのsrc属性にアプリURI設定して、ページを遷移させるのは回避している。
2. anchorのhref属性にAndroid Intentを設定する方法
iframeのsrc属性のURIからアプリを起動することができなくなったことにより、
上記のiframeを使った手法が、使えなくなったので、
Google Developersのページで紹介されている手法。
https://developers.google.com/chrome/mobile/docs/intents
何やっているかというと、下記3つを使って、
host: アプリ名など
scheme: お好きにどうぞ
package: アプリのpackage名
anchorのhref属性に、
<a href="intent://[host]#intent; scheme=[scheme];@package="[package];end" 説明文 </a>
と設定してあげると、よしなにやってくれる。
ただし、1. 2. ともにBrowserによって対応可否があるので、
まじめにやるならUAなどをみて使い分ける必要がある。
まじめにやるならUAなどをみて使い分ける必要がある。
Browser毎の対応状況↓
1.とりあえず飛ばしちゃう手法
1.とりあえず飛ばしちゃう手法
アプリインストール済み | アプリ未インストール | |
---|---|---|
Android標準Browser | アプリ起動 | GooglePlay起動 |
Chrome | GooglePlay起動 | GooglePlay起動 |
Firefox | アプリ起動 | GooglePlay起動 |
Opera | アプリ起動 | GooglePlay起動 |
2. anchorのhref属性にAndroid Intentを設定する方法
アプリインストール済み | アプリ未インストール | |
---|---|---|
Android標準Browser | アプリ起動 | GooglePlay起動 |
Chrome | アプリ起動 | GooglePlay起動 |
Firefox | ページ読み込みエラー | ページ読み込みエラー |
Opera | アプリ起動 | ページ読み込みエラー |
2013年9月17日火曜日
登録:
投稿 (Atom)