1.下载最新版的apktool的jar包:
https://ibotpeaches.github.io/Apktool/install/
https://bitbucket.org/iBotPeaches/apktool/downloads
(可配置apktool运行环境,Mac os: 把下载的文件copy到/usr/local/bin目录下,修改权限为可执行chmod a+x apktool.jar apktool)
2.反编译:java -jar apktool.jar d xxx.apk
3.重新打包:java -jar apktool_2.2.4.jar b xxx。(在xxx目录dist目录下生成重新打包的apk文件)
(修改包名重新打包,注意有些布局自定义属性要更改对应包名,不然打包通不过)
4.签名:
生成签名文件, keytool -genkey -keystore test.keystore-alias test -keyalg RSA -validity 10000
签名 jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore test.keystore -signedjar signed.apk t.apk 'test'
(最后的'test'要跟生成签名 -alias 后面的test保持一致的命名)
(上传GP要求zipalign,命令:/Library/Android/sdk/build-tools/23.0.3/zipalign -v 4 test.apk zip.apk)
5.修改smali文件
注意.line 行号不能乱(只是追踪堆栈有用),函数调用基类不能写错(例如 Activity)
6.加入友盟统计
com 目录下添加友盟反编译文件夹<umeng>
Manifest中添加如下配置:
<meta-data android:value="XXXXXX" android:name="UMENG_APPKEY"></meta-data>
<meta-data android:value="test" android:name="UMENG_CHANNEL"/>
最好定义一个基类添加追踪代码,然后修改smail文件的基类。
7.加入AdMob广告.
com 目录下添加AdMod反编译文件夹<google>
Manifest中添加如下配置:
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" android:name="com.google.android.gms.ads.AdActivity" android:theme="@android:style/Theme.Translucent"/>
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>
<activity android:exported="false" android:name="com.google.android.gms.common.api.GoogleApiActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
跟添加友盟统计一样在基类里面初始化:
MobileAds.initialize(this, "YOUR_ADMOB_APP_ID");
最好通过自定义View
public class MyAdView extends LinearLayout {
public MyAdView(Context context) {
super(context);
}
public MyAdView(Context context, AttributeSet attrs) {
super(context, attrs);
addAdView(context);
}
public MyAdView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private void addAdView(Context context){
AdView adView = new AdView(context);
adView.setAdSize(AdSize.BANNER);
adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111");
addView(adView);
AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);
}
}