[Android] APP 去除廣告
朋友覺得廣告太煩,於是委託我幫忙去一下廣告~
研究了一下,還蠻有趣的,反編譯 APK 檔案,把調用廣告的部份去掉,然後重新編譯,簽名,就完成了。
/* 環境使用 linux ,因為用到一些 shell script 的工具,windows 用戶也可以用 git shell 取代 */
首先需要 Java 版本 1.8 ,這部份不贅述,請自行下載。
然後你需要 apktool
apktool 的部份就是一個 script 和一個 jar 檔案。
其實就放在一個資料夾就好,不用放在系統目錄。
記得重命名為 apktool 及 apktool.jar。
然後你需要簽名程式 uber-apk-signer
重命名為 sign.jar
然後 run 一下老朽的 script。
另存為 rmad.sh 然後在 shell 運行 bash rmad.sh APP_CONTAINS_ADS.apk
就會跑出不含廣告的 apk 檔案了。
這部份如果是 windows 用戶,如不想用 git shell,也可以用其他工具代替,主要就是要把含 ->loadAd 的那些行刪去。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
APK="$1" | |
if [ -f $APK ];then | |
./apktool d "$APK" | |
OIFS="$IFS" | |
IFS=$'\n' | |
grep -lR "\->loadAd" "${APK%.*}" | xargs -d '\n' -- sed -i '/\->loadAd/d' | |
IFS="$OIFS" | |
./apktool b "${APK%.*}" -o "${APK%.*}_no_ad.apk" | |
java -jar sign.jar --overwrite --apks "${APK%.*}_no_ad.apk" | |
rm -rf "${APK%.*}" | |
else | |
echo "please input apk file" | |
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# Copyright (C) 2007 The Android Open Source Project | |
# | |
# Licensed under the Apache License, Version 2.0 (the "License"); | |
# you may not use this file except in compliance with the License. | |
# You may obtain a copy of the License at | |
# | |
# http://www.apache.org/licenses/LICENSE-2.0 | |
# | |
# Unless required by applicable law or agreed to in writing, software | |
# distributed under the License is distributed on an "AS IS" BASIS, | |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
# See the License for the specific language governing permissions and | |
# limitations under the License. | |
# This script is a wrapper for smali.jar, so you can simply call "smali", | |
# instead of java -jar smali.jar. It is heavily based on the "dx" script | |
# from the Android SDK | |
# Set up prog to be the path of this script, including following symlinks, | |
# and set up progdir to be the fully-qualified pathname of its directory. | |
prog="$0" | |
while [ -h "${prog}" ]; do | |
newProg=`/bin/ls -ld "${prog}"` | |
newProg=`expr "${newProg}" : ".* -> \(.*\)$"` | |
if expr "x${newProg}" : 'x/' >/dev/null; then | |
prog="${newProg}" | |
else | |
progdir=`dirname "${prog}"` | |
prog="${progdir}/${newProg}" | |
fi | |
done | |
oldwd=`pwd` | |
progdir=`dirname "${prog}"` | |
cd "${progdir}" | |
progdir=`pwd` | |
prog="${progdir}"/`basename "${prog}"` | |
cd "${oldwd}" | |
jarfile=apktool.jar | |
libdir="$progdir" | |
echo $libdir | |
if [ ! -r "$libdir/$jarfile" ] | |
then | |
echo `basename "$prog"`": can't find $jarfile" | |
exit 1 | |
fi | |
javaOpts="" | |
# If you want DX to have more memory when executing, uncomment the following | |
# line and adjust the value accordingly. Use "java -X" for a list of options | |
# you can pass here. | |
# | |
javaOpts="-Xmx512M -Dfile.encoding=utf-8" | |
# Alternatively, this will extract any parameter "-Jxxx" from the command line | |
# and pass them to Java (instead of to dx). This makes it possible for you to | |
# add a command-line parameter such as "-JXmx256M" in your ant scripts, for | |
# example. | |
while expr "x$1" : 'x-J' >/dev/null; do | |
opt=`expr "$1" : '-J\(.*\)'` | |
javaOpts="${javaOpts} -${opt}" | |
shift | |
done | |
if [ "$OSTYPE" = "cygwin" ] ; then | |
jarpath=`cygpath -w "$libdir/$jarfile"` | |
else | |
jarpath="$libdir/$jarfile" | |
fi | |
# add current location to path for aapt | |
PATH=$PATH:`pwd`; | |
export PATH; | |
exec java $javaOpts -jar "$jarpath" "$@" |
This file has been truncated, but you can view the full file.
View raw
(Sorry about that, but we can’t show files that are this big right now.)
參考:maple blog 神馬文庫
EOF
留言
張貼留言