hackerchen 发表于 2018-2-16 13:17

Xposed插件开发入门操作图文教程(基于Android Studio3.01)(送给新手的2018新年...

本帖最后由 hackerchen 于 2018-3-15 13:19 编辑

新年好,这是我的第一个正式帖子,算是处女贴,今天又是大年初一,也是拜年贴。'

该帖子注重的是让新手成功跑起Demo,然后才有动力进一步学习,往往第一步折腾很长时间,so 我的帖子应该对新手很有帮助。
本教程主要是复现Xposed官方教程的打印日志的那个Demo。

更新:
1. 感谢13楼14楼楼主提出来的知识点,其中compileOnly 代替 provided,在我现在看到的中文教程中还没人提到,(英文的还没敢去尝试看),我有时间试一下,大家也可以去试一下。14楼的提到只需要改一处就可以,如果导入api-source.jar应该要改两处,这个我也还没试
2. 感谢版主帮我把文章中因为误操作导致的图片路径信息删除
3. 待补充

随着AS的不断更新,有些网上的教程都过时了,或者还存在一些没解释清除的问题。因此今天把基于Android studio3.01(大年初一当前最新版本)的Xposed入门插件开发的步骤整理下来,供大家参考。
由于本人也是小白,Java语法过年前15天看了一遍,因此会存在很多问题请大家指正。另外在我的教程里,有些Android代码可能会解释一下对应的Java的语法,巩固一下基础(其实是我又忘记Java的相关语法了)。(该帖没什么科技含量,大神勿喷)

材料工具准备:
[*]Android Studio3.0.1(简称AS),推荐安装64bit版本(因为现在的NDK开发,AS主要支持64bit版本了。稍后NDK开发入门教程也会发出来。)
[*]有Root的虚拟机或者真机。本教程使用Genymotion虚拟机,在Genymotion下载Android5.1系统(推荐),自带root。(不建议使用5.0以下的系统,原因是提示更友好)
[*]安装XposedInstaller_3.1.5.apk
[*]下载api jar包。api-82.jar,api-82-source.jar(5.0系统推荐安装这个,这是网上推荐的)。

    如何安装AS,如何安装Genymotion,如何安装Xposed框架,在哪里下载api jar包,这些基本的操作步骤,不是本文重点,网上查资料。

    Genymotion安装可能会遇到坑,提示启动时exit(01)错误,我参考国外的坛子说是卸载Vbox->重启->重新安装Vbox->重启,运行Vbox,提示网卡错误,后来把网卡改成桥接模式,使用Genymotion的启动器(也就是桌面红色图标那个)启动成功。不要使用Vbox启动,否则只能看到黑色屏幕的启动代码,看不到模拟的手机界面。

======================正文开始==========================


[*]创建一个普通的android工程(如何创建就不教了),其中选择如图那个就可以了(这里其实无所谓,新手还是根据我的步骤走)。我的工程名叫HelloTest02


2.切换到Projiect视图。(我相信有些人仍然使用的是Anroid视图,我之前就不会切换),点击左图的红色方框,选择Projiect就好了。效果如又图。以后所有的教程都是在Projiect视图下进行的,别人写的教程一般也是这个视图下进行的。
   

3.复制并安装jar包。把两个jar包复制到lbs目录下,然后在每个jar包上右键add as library,这样每个jar包就可以展开了。结果如下图所示。

4.修改AndroidMainfest.xml
使用下面的代码直接替换掉原来得代码。(AS代码代码贴近EverNote,缩进丢失,使用sulime中转一下,颜色丢失,两者不可兼得??? )
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android";
    package="com.kuaishou.chen.hellotest02">
   <uses-sdk android:minSdkVersion="15" />
    <application
      android:label="@string/app_name" >
      <meta-data
            android:name="xposedmodule"
            android:value="true" />
      <meta-data
            android:name="xposeddescription"
            android:value="Hook log test" />
      <meta-data
            android:name="xposedminversion"
            android:value="53" />
    </application>
   
</manifest>
效果如下,与自动生成的比较,主要的不同其实就是,applicatipn节点被替换掉了。use-sdk这句话应该是eclipse时代,安卓4.0 app开发使用的,AS时代在build.gradle指明minSDK,AS自动生成的AndroidMainfest文件没有这句话,经过测试确实可以删除这句。

5.修改APP目录下的build.gradl。不出意外,不管是本教程还是其他人的教程修改的都是这个gradle文件


原文dependencies部分如下

修改上面的代码。(AS原来版本是compile,现在AS3改成了implementation)现在修改上面的三处implementation为provided。(我测试的是必须三处都改),具体后面(如果有的话)会进行解释

6.创建测试代码。
新建一个类叫做TestHook(在包名上>右键>java class >输入名字TestHook>OK)
输入代码:注意这里面加粗的部分,包名一定对应自己的包名 类名一定要跟自己创建的java class文件名相同。如果不是按照本教程起名字和包名,AS提示错误,做相应的修改即可。大家最好开启AS的自动import功能(自己查教程),有的地方还是需要使用alt+enter导入包

package com.kuaishou.chen.hellotest02;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
/**
* Created by Administrator on 2018/2/15.
*/
public class TestHook implements IXposedHookLoadPackage {
    public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
      XposedBridge.log("Loaded app: " + lpparam.packageName);
    }
}


7.XposedBridge 从assets 目录中的xposed_init 文件中获取入口点。xposed_init文件中每行配置一个进入点(这个地方还不懂,网上摘得),使用完全限定名。在main目录下,创建assets文件夹(在main文件夹上右键new >directory>输入文件名assets>OK。还一种方法:main文件夹右键>new>folder>assets folder>ok搞定,截图不上了,应该没什么难度)

在新建的assets文件夹下面建立xposed_init文件(assets上面右键>new>file>输入xposed_init>OK)

在xposed_init文件上输入你的包名+类名,记得一定要对应你的包名和类名,用“.”连接即可。

com.kuaishou.chen.hellotest02.TestHook

如下所示:


8.接下来尝试一下Make projiects
如下图提示,生成.apk表示成功


9.接下来虚拟机测试。
一般情况下,大家习惯了使用Run按钮
让AS自动安装app到虚拟机或者真机测试,但是我在这里面遇到问题
提示Default Activity not found 。原因不言而喻,就是因为之前AndroidMainfest.xml重新配置。(AS至于为何检查DefaultActivity就不清楚了)
解决方法就是在app >build>outputs>apk>debug目录下会编译出apk文件。直接把该文件拖放到虚拟机Genymotion,Genymotion自动安装。
(有一个问题:realse为什么没有生成apk???)


接下来虚拟机提示模块没有激活,在xposed installer的模块里面勾选后重启即可。细节不再详述。
小技巧:Genymotion硬件重启可能实现不了(至少是我的这样),点击XposedInstaller的重启,虚拟机会卡死,然后就没反应了,需要手动关闭虚拟机,然后重新启动,这过程很慢,因为要启动VBox,并且Vbox要加载Android底层。相反使用软重启,不需要重启Vbox,不需要再加载安卓底层,所以速度快,方便,不会卡死。


成功,注意这个日志,可能显示不完全,其实是可以水平左右拖动的。如果还是不方便建议,使用右上角的保存按钮,保存到log日志,然后在文件管理器打开查看。另外模拟器也支持长按文本,然后选择复制到电脑记事本或者其他文本编辑器的操作(我还不会联调,不会让AS打印出Xposwed的log信息)



(大家有免费的CB鼓励一下小弟,谢谢了!)


swjtu_ray 发表于 2018-2-16 15:19

谢谢楼主,对开发Xposed的新手帮助颇大!
祝楼主新年快乐,狗年大吉。

hackerchen 发表于 2018-3-11 22:04

Hmily 发表于 2018-2-22 16:10
那个地址应该是开始时候直接把图片粘贴上去导致的吧,图片需要先上传再贴到正文中,已经帮你编辑删除了,是 ...

感谢版主现在没时间搞了,后面再补充

wpp 发表于 2018-2-16 13:39

沙发顺便膜拜一下,新年好。。我看不懂- -哈哈

与我何干 发表于 2018-2-16 15:12

yxjoe 发表于 2018-2-16 15:50

来看看,感谢楼主分享

老唐不老 发表于 2018-2-16 17:08

楼主辛苦,新年好!

keyyan 发表于 2018-2-16 19:21

老铁,帖子编辑是很辛苦,不如直接来套视频从零开始带吧{:1_893:}

52pojie3009 发表于 2018-2-16 20:21

祝楼主新年快乐,狗年大吉

疯狂醉虎 发表于 2018-2-16 21:17

谢谢楼主!祝楼主新年快乐,狗年大吉!

夜曲 发表于 2018-2-16 22:09

新年快乐,谢谢
页: [1] 2 3 4 5 6
查看完整版本: Xposed插件开发入门操作图文教程(基于Android Studio3.01)(送给新手的2018新年...