最近老板让研究一下xposed,用来实时抓取公众号文章推送,然后上报到自己服务器。我一个搞Java后端的怎么叫研究起安卓和xposed了呢!
这篇文章主要是记录下踩过的坑,所以说不会很详细的讲解怎么实现功能,仅供自己记录一下,开始!
PS:这里是第一次写东西,请见谅!
资料:https://www.jianshu.com/p/61b6e384d1cf
https://www.colabug.com/5324975.html
开始吧!
1.打开AndroidStudio(Version3.2),新建一个工程,选择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
两种方式,第一种是手动下载XposedBridgeApi-82.jar ,拖放到“项目名称/app/libs/”里面(注意:不是网上说的单独建立lib文件夹!)然后右键“Add As Library” 自行添加这个jar包。而compileOnly ‘de.robv.android.xposed:api:82′和 compileOnly ‘de.robv.android.xposed:api:82:sources’这两句
第二种就是我采用的这种,直接采用gradle仓库加载jar包。首先在build.gradle中dependencies下加入
compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'
很多文档到这就完了,但是很重要的一点,这是笔者卡了很久的问题,
在build.gradle中加入下面这一行,这句代码是告诉AndroidStuido使用 jcenter 作为代码仓库,从这个仓库里远程寻找 de.robv.android.xposed:api:82 这个API
repositories {
jcenter()
}
4. 实现hook操作
具体hook的功能,建议直接百度一下,xposed hello world,跟着教程做就行了,这里就不再阐述。
5.拦截微信公众号
这个地方主要的坑在于微信不同的版本的类总是改变。笔者采用的是微信6.67版本。因为笔者不是安卓开发,不是太懂反编译。只能下次熟悉后后续加上了。
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();
}
});
此处的坑在于微信这个方法的第一个参数是字符串,所以要传入String.class,要不然就会报错说没找到这个class.
拿出来的map,就是我们需要的微信公众号推送的文章。
6.HttpURLConnection
按照我平时开发WEB准备用httpclient,结果网上一查(从Android6.0开始HttpClient已经被废弃从SDk中移除掉了),然后百度一下
Android studio里在相应的module下的build.gradle中加入即可。 android {
useLibrary 'org.apache.http.legacy' }
但是我自己加了以后执行好像并没有效果,后来才发现安卓访问要另开一个线程。。。(不要吐槽,笔者是Android小白)
于是在主线程中加入
new Thread(networkTask).start();
RunnablenetworkTask =new Runnable() {
@Override
public void run() {
HttpURLConnection具体请求。
}
};
ps:这就是我作为一个Java后端在公司没有安卓的情况下搞Xposed,遇到的所有坑。如果有什么错误,请大家指出,哈哈哈!
网友评论