Android
google
apktool
apk

Androidアプリapkから広告を除こう オフラインアプリ&オンラインアプリ

More than 1 year has passed since last update.

非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
フリーの数式をグラフにしてくれるアプリ
g.PNG

まず、加工なしVer
gra_b.jpg

ネットワーク関係のマニフェストを書き換える
gra.jpg

すると...
gra_a.jpg
下の方にmissing internet permission in androidmanifest.xmlって出ちゃってますねorz

実験2

次は、関数電卓 Panecalをやってみる
手順通りにやって実行すると...
p.png
正常に起動できず終了してしまいましたorz

オンラインアプリ

ここから本題
オフラインアプリはマニフェストを書き換えて強制オフライン状態にすれば容易にできました。しかも、マニフェストを編集するアプリがストアにあるので誰でも簡単に出来ます(APK Permission Removerの他にもApk Editerなどでも出来る)
しかし、オンライン状態で使用するアプリでは上記のやり方では意味のないアプリとなってしまいます

今回はQiitaに載せるという点を考えてQiitappをターゲットにします
q.PNG

☆手順
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でもいいんだよね・・・(´・ω・`)
d.PNG
微妙に変わってます

起動して確かめる

Before
Screenshot_2017-03-06-23-55-20.jpg

↓↓↓↓↓↓

After
Screenshot_2017-03-06-23-56-41.jpg
無事広告が消えました!!v(´・ω・`)v

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のあのアプリやまとめサイトリーダーのアプリ側の広告などなど
Screenshot_20170306-233248.png

失敗するアプリもあります。起動しなかったら諦めましょう

最後に

作者様...問題がありましたらコメント欄に「削除しろよおおお」ってあれば速攻でこの記事削除して「ごめんなさい」します