画像やリンクが無効になっている可能性もあるのでご了承下さい。
はじめに
筆者はプログラマーでは無いし Android アプリの構造だなんだというのはさっぱりな人間だけど、今回はやりたいことが明確だしググりながら試行錯誤すれば多少のことは何とかなるだろうで。
それに FireOS からブロックされた Launcher Hijack を使うための回避策としてつかう App Cloner では APK に端末毎のユニークな ID を用いた制限も埋め込まれるから使い回し効かないし、バイナリサイズが倍位になっているのも気になる。
そんなもんで思い切って自分でビルドする方向で試行錯誤してみた。
一応、本記事はある程度自分で何とか出来る人向けとしておく。
ビルド環境作成
ソースを拾ってくるだけでなく、Bash が欲しいので Git for Windows をインストールする。
ソースをビルドする為には Android Studio が必須なのでこれもまたダウンロードしてインストールする。
非常に細かいファイルが多いので SSD に入れる事をおすすめする。
![](https://developer.android.com/static/images/social/android-developers.png?hl=ja)
ソースの取得とパッケージ名の変更
インストールした Git for Windows に含まれる Git Bash を起動して適当に作業ディレクトリを作成し、github にあるリポジトリからソースを clone してあげる。
mkdir ~/source
cd ~/source
git clone https://github.com/BaronKiko/LauncherHijack.git
cd LauncherHijack
カレントディレクトリが Launcher Hijack のソースのある所で次の 2 つのコマンドを打ち込む。
# パッケージ名を変数に入れておく
PKG=org.bp7.bucci.launcherhijack
# パッケージ名一括置換のワンライナー
fgrep -r com.baronkiko.launcherhijack ./* | cut -d ':' -f 1 | sort -u | xargs sed -i -e "s/com\.baronkiko\.launcherhijack/$PKG/g;"
変数 PKG には変更後のパッケージ名を入れておく。筆者は自分でドメインを持っているので当ブログのドメインを用いて定義した。
GooglePlay に公開する物でも無いから Fire タブレットにインストールされている他アプリと被りさえしなければ何でも良いと思うが、出来る限りユニークな名前にしておく事をおすすめ。
fgrep の行ではカレントディレクトリから再帰的に変更元である com.baronkiko.launcherhijack というパッケージ名の文字列を探し出し、該当するファイルを列挙させて sed コマンドで一括して PKG に定義されるパッケージ名に置き換えて上書き保存する動作をする。この辺のコマンドの組み合わせは思いつきで直ぐ出来たので楽だった。
ビルドする
Android Studio を起動し、パッケージ名を一括変更したプロジェクトを開く。
開いたら勝手に裏でビルドを始めてたので落ち着くまでまってから Generate Signed Bundle / APK… をクリックする。
次に出てくる項目では APK にチェックをいれて Next をクリックする。
APK には署名を行わなければ端末にインストールが出来ないので Key store を作成する必要がある。
Create new… をクリックする。
Key store path で任意のフォルダに任意のファイル名で指定しておく。
Password と Confirm (パスワード確認) に Key store のパスワードを設定する。
Key 以下 Alias は良く分からないからそのまま Key0 にしておいた。
Key の Password は Key Store と異なるものを適当に設定しておく。
Certificate は証明書に必要な情報を入れる。個人で使う分には全部空欄でも良いのかも知れないが、筆者は細かい人間なので入力しておいた。
Key Store の作成が終わって元のウィンドウに戻ってくると必要な情報が埋められた状態だった。
Key store のパスワードと作成した鍵とそのパスワードの情報が必要ということで。
そして Next をクリックする。
そして最後の部分。
Build Variants では release だけ選択しておいても大丈夫ぽいけど debug も一緒に選択した。
Signature Versions は V1 と V2 両方にチェックする事。片方だけとかやると端末にインストール出来なかった。
Finish をクリックすると Launcher Hijack のビルドが開始され、エラーが無ければ右下に Locate だとか Analyze やらリンクのあるポップアップがでるので、Locate をクリックして出来上がった APK ファイルにアクセス出来る。
完成した APK ファイルは app-release.apk となっているので、これは分かりやすくリネームしておくと良い。
ファイルサイズも 1,553KB になる。ちなみに App Cloner でクローンとした APK は 3,927KB もあったので容量として半分以下に収まったことにもなる。
Fire タブレットにインストールしてみる
App Cloner で作成したクローンな Launcher Hijack をアンインストールした後、今回ビルドした APK ファイルを転送してインストールした。
無事に正常動作してくれた。
この通りパッケージ名も変更したとおりに変わっているので FireOS からのブロックも喰らわない。
おわりに
Launcher Hijack はライセンス的に GNU GPLv3 なので改造後のソースファイルと一緒に公開しておけば頒布可能だけど、自分でビルドした方が安心ということでリクエストがない限りは筆者ビルドのパッケージは公開しないでおこうかと思う。
取り敢えず自分でパッケージをビルドしておけば、Fire タブレットを複数持っていても使い回しが効くし App Cloner とか使わないで済むから出来る人や出来なくても頑張ってやって見ようという方は挑戦してみると良いかも知れない。
Launcher Hijack V3 をビルドする為のメモ
V3 の AppNameMod な apk のリクエストがあったので自前で試行錯誤してビルドを通した。
ビルド通すまでがひたすら大変だったけど、やったことは次の 2 ファイルへの修正となる。
/LauncherHijack-3/build.gradle
/LauncherHijack-3/app/build.gradle
自動的に修正された項目もあるが、主な変更点は次の差分の通り。
--- ../t/LauncherHijack-3/build.gradle 2017-07-28 03:07:00.000000000 +0900
+++ ./build.gradle 2019-06-18 09:30:08.911784900 +0900
@@ -3,9 +3,10 @@
buildscript {
repositories {
jcenter()
+ google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.3.3'
+ classpath 'com.android.tools.build:gradle:3.4.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
@@ -15,6 +16,7 @@
allprojects {
repositories {
jcenter()
+ maven { url 'https://maven.google.com' }
}
}
--- ../t/LauncherHijack-3/app/build.gradle 2017-07-28 03:07:00.000000000 +0900
+++ ./app/build.gradle 2019-06-18 09:34:58.070076700 +0900
@@ -2,10 +2,9 @@
android {
compileSdkVersion 23
- buildToolsVersion "25.0.0"
defaultConfig {
- applicationId "com.baronkiko.launcherhijack"
+ applicationId "org.bp7.bucci.launcherhijack"
minSdkVersion 21
targetSdkVersion 23
versionCode 3
@@ -20,7 +19,16 @@
}
dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
- testCompile 'junit:junit:4.12'
- compile 'com.android.support:appcompat-v7:23.4.0'
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ testImplementation 'junit:junit:4.12'
+ implementation 'com.android.support:appcompat-v7:23.4.0'
}
+
+android {
+ lintOptions {
+ checkReleaseBuilds false
+ // Or, if you prefer, you can continue to check for errors in release builds,
+ // but continue the build even when errors are found:
+ abortOnError false
+ }
+}
あとは Android Studio に足りない物や更新のある物を適用してビルドが通るまでトライアルアンドエラーでなんとかする。
コメント
こんにちは!
もしよければAPKファイルを公開してもらえませんか?
こんにちは!!
はいどうぞ!
ありがとうございます!
助かりました