非Root化のAndroid端末において広告を出ないようにアプリを利用しようとしたときのメモ
対象者
- 自分でぐぐれる
- adb.exeをパスに通ってる
- apktool等のツールと知識を持ってる
- USBデバッグがオン
環境
- 作業側 Windows10 pro 64bit
- 端末側 Android 6.0
オフラインのアプリの広告
オフラインアプリの広告は簡単に除ける。実は「除ける」、という表現は正確ではない。マニフェストを書き換えてアプリをオフライン状態にする、というのが正しい。
複数やり方があるが、最も簡単なやり方を紹介する
まず、Google PlayからAPK Permission Removerをダウンロードしてインストールしよう
☆手順
1.アプリを起動する
2.Open an appを起動する
3.マニフェストを編集したいアプリを選択
4.ネットワークへのアクセス等をタップし❌マークにする
5.Save&Re-Installを選択してアンインストールしてからインストールする
実験1
Grapher
フリーの数式をグラフにしてくれるアプリ
すると...
下の方にmissing internet permission in androidmanifest.xmlって出ちゃってますねorz
実験2
次は、関数電卓 Panecalをやってみる
手順通りにやって実行すると...
正常に起動できず終了してしまいましたorz
オンラインアプリ
ここから本題
オフラインアプリはマニフェストを書き換えて強制オフライン状態にすれば容易にできました。しかも、マニフェストを編集するアプリがストアにあるので誰でも簡単に出来ます(APK Permission Removerの他にもApk Editerなどでも出来る)
しかし、オンライン状態で使用するアプリでは上記のやり方では意味のないアプリとなってしまいます
今回はQiitaに載せるという点を考えてQiitappをターゲットにします
☆手順
1.Google Playからapk抽出をダウンロードしてインストールしましょう。apk抽出はインストールされてるアプリをapkファイルとして抽出できるアプリ。
2.apk抽出を使用して広告を除きたいアプリを選択し抽出し作業側にコピーする
3.apkをデコンパイルする
$ apktool.bat d Qiitapp.1.1.1.apk
I: Using Apktool 2.0.0 on test.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Users\[USER]\apktool\framework\1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
testI: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
4../Qiitapp.1.1.1/smali/com/google/android/gms/ads内をゴニョゴニョしたsmaliファイルに置き換える(後で記述)
5.ビルドする
$ apktool.bat b Qiitapp.1.1.1 test.apk
I: Using Apktool 2.0.0
I: Checking whether sources has changed...
I: Checking whether resources has changed...
I: Building apk file...
ビルドすると./Qiitapp.1.1.1/dist内にtest.apkが出来る
6.署名
$ keytool -genkeypair -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 10950 -dname "CN=Android Debug,O=Android,C=US" -keystore debug.keystore -storepass android
すると、debug.keystoreが出来るのでこれを署名に利用
$ jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA1 -tsa http://timestamp.digicert.com -keystore debug.keystore -storepass android test.apk androiddebugkey
7.インストール
$ adb install test.apk
2407 KB/s (2206166 bytes in 0.894s)
pkg: /data/local/tmp/test.apk
Success
apk取ってくるのもadbでもいいんだよね・・・(´・ω・`)
微妙に変わってます
起動して確かめる
↓↓↓↓↓↓
smaliのゴニョゴニョについて
変更点は複数箇所あるので1部を紹介
例えば、Qiitapp.1.1.1/smali/com/google/android/gms/internal/az.smali内の
const-string v0, "https://googleads.g.doubleclick.net/mads/static/mad/sdk/native/sdk-core-v40.html"
↓↓↓↓↓↓
const-string v0, "https://googleads.g.doubleclick.ne@/mads/static/mad/sdk/native/sdk-core-v40.html"
他にもQiitapp.1.1.1/smali/com/google/android/gms/ads/内の多くを書き換えてます
他のアプリ
同様にポケモンGoのあのアプリやまとめサイトリーダーのアプリ側の広告などなど
失敗するアプリもあります。起動しなかったら諦めましょう
最後に
作者様...問題がありましたらコメント欄に「削除しろよおおお」ってあれば速攻でこの記事削除して「ごめんなさい」します
Qiitaの利用規約8.4
に明確に違反すると思います。
広告収入というのは製作者側の正当な対価なわけですが、それを受ける権利を侵害するのですか?
@ryo716 面白い話をありがとうございます。興味深く読ませていただきました。
Ad系の表示する技術の侵害あたりかなー smaliのURL書き換えとかしている箇所あたりで?
<再パッケージの手順まで書いてないからセーフ?(苦笑
ただ Qittaは企業サイトでクレームに弱いので、個人ブログとかで書いていただいたほうが消される恐れがなくて良いかも
(そういう意味だと apktoolsの記事とかもグレーなんですよねw
あとはQittaappという他の人のアプリでなく、自分で広告表示用のテストアプリを作っての検証記事に修正したほうが
記事の内容の焦点的にはベターかと思いますよ
予想通りお叱りの言葉
smaliのゴニョゴニョについて全て詳しく書いてないからし他のapktool系の記事あるし大丈夫かなぁ~って思ったけどダメみたいなの