最近老板讓研究一下xposed,用來(lái)實(shí)時(shí)抓取公眾號(hào)文章推送竣付,然后上報(bào)到自己服務(wù)器。我一個(gè)搞Java后端的怎么叫研究起安卓和xposed了呢滞欠!
這篇文章主要是記錄下踩過(guò)的坑古胆,所以說(shuō)不會(huì)很詳細(xì)的講解怎么實(shí)現(xiàn)功能,僅供自己記錄一下筛璧,開始逸绎!
PS:這里是第一次寫東西,請(qǐng)見諒夭谤!
資料:http://www.reibang.com/p/61b6e384d1cf?
https://www.colabug.com/5324975.html
開始吧桶良!
1.打開AndroidStudio(Version3.2),新建一個(gè)工程,選擇Empty Activity沮翔。
2.打開AndroidManifest.xml,在application下添加
<meta-data?
android:name="xposedmodule"
android:value="true" />
<meta-data?
android:name="xposeddescription"
android:value="true" />
<meta-data?
android:name="xposedmodule"
android:value="你猜猜" />
<meta-data?
android:name="xposedminversion"
android:value="53" />
最后AndroidManifest.xml如圖所示陨帆,注意不要忘記箭頭所知位置。
3.build.gradle
兩種方式采蚀,第一種是手動(dòng)下載XposedBridgeApi-82.jar 疲牵,拖放到“項(xiàng)目名稱/app/libs/”里面(注意:不是網(wǎng)上說(shuō)的單獨(dú)建立lib文件夾!)然后右鍵“Add As Library” 自行添加這個(gè)jar包榆鼠。而compileOnly ‘de.robv.android.xposed:api:82′和 compileOnly ‘de.robv.android.xposed:api:82:sources’這兩句
第二種就是我采用的這種纲爸,直接采用gradle倉(cāng)庫(kù)加載jar包。首先在build.gradle中dependencies下加入
compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'
很多文檔到這就完了妆够,但是很重要的一點(diǎn)识啦,這是筆者卡了很久的問(wèn)題,
在build.gradle中加入下面這一行神妹,這句代碼是告訴AndroidStuido使用?jcenter?作為代碼倉(cāng)庫(kù)颓哮,從這個(gè)倉(cāng)庫(kù)里遠(yuǎn)程尋找 de.robv.android.xposed:api:82 這個(gè)API
repositories {
? ? jcenter()
}
4. 實(shí)現(xiàn)hook操作
具體hook的功能,建議直接百度一下鸵荠,xposed hello world冕茅,跟著教程做就行了,這里就不再闡述。
5.攔截微信公眾號(hào)
這個(gè)地方主要的坑在于微信不同的版本的類總是改變姨伤。筆者采用的是微信6.67版本哨坪。因?yàn)楣P者不是安卓開發(fā),不是太懂反編譯乍楚。只能下次熟悉后后續(xù)加上了当编。
XposedHelpers.findAndHookMethod("com.tencent.mm.sdk.platformtools.ay", loadPackageParam.classLoader,"WA",String.class,new XC_MethodHook() {
@Override
? ? protected void afterHookedMethod(MethodHookParam param)throws Throwable {
Map<String,String> cond = (Map<String, String>) param.getResult();
}
});
此處的坑在于微信這個(gè)方法的第一個(gè)參數(shù)是字符串,所以要傳入String.class徒溪,要不然就會(huì)報(bào)錯(cuò)說(shuō)沒(méi)找到這個(gè)class.
拿出來(lái)的map,就是我們需要的微信公眾號(hào)推送的文章凌箕。
6.HttpURLConnection
按照我平時(shí)開發(fā)WEB準(zhǔn)備用httpclient,結(jié)果網(wǎng)上一查(從Android6.0開始HttpClient已經(jīng)被廢棄從SDk中移除掉了)词渤,然后百度一下
Android studio里在相應(yīng)的module下的build.gradle中加入即可牵舱。 android {
? ? ? ? useLibrary 'org.apache.http.legacy'? ? ? ? }
但是我自己加了以后執(zhí)行好像并沒(méi)有效果,后來(lái)才發(fā)現(xiàn)安卓訪問(wèn)要另開一個(gè)線程缺虐。芜壁。。(不要吐槽高氮,筆者是Android小白)
于是在主線程中加入
new Thread(networkTask).start();
RunnablenetworkTask =new Runnable() {
@Override
? ? public void run() {
? ??HttpURLConnection具體請(qǐng)求慧妄。
}
};
ps:這就是我作為一個(gè)Java后端在公司沒(méi)有安卓的情況下搞Xposed,遇到的所有坑剪芍。如果有什么錯(cuò)誤塞淹,請(qǐng)大家指出,哈哈哈罪裹!