Android 编译成功之后,开始我们的重头戏,编译 Xposed
Xposed 为我们提供了一个编译工具 XposedTools , 我们先把这仓库 clone 下来
下来之后我们进入这个仓库的 local_manifests 文件夹,然后发现这个文件夹下有好几个类似 xposed_sdkN.xml 的文件,这个是我们编译不同版本 xposed 的 repo 本地仓库文件,比如你编译的是 sdk =23 的版本,那么我们需要的也是 xpsoed_sdk23.xml ,我们需要把相应的文件移动到指定位置
这里我们以 sdk = 23 为例说明(也就是分支 android-6.0.1_r1 ):
cp xpseod_sdk23.xml [aospPath]/.repo/local_manifests/xposed_sdk23.xml
大概讲一下这个 xml 的意思:就是从 githu 上clone下来 xposed 放在 [aospPath]/frameworks/base/cmds/xposed 位置,删除原来在 platform/art 位置的 art 仓库,然后 clone art 放在 [aospPath]/art 。
标签里面的 revision 是指定这个仓库的编译分支
xposed_sdk23.xml
移动成功之后,我们回到 [aospPaht] 下 执行 repo sync
来同步代码,如果提示同步 art 失败可以手动删除 art 仓库,重新执行 repo sync
同步成功之后,我们进行下一步。
到这里我们的代码还差一个 XposedBridge, 我们把 XpsoedBridge clone 下来。其实 XposedBridge 就是一个 apk, 下载成功之后我们可以尝试使用 gradle assemble
编译一下,提示编译失败,原来是缺少 local.properties
,我们创建一个 local.properties, 配置好 sdk 的路径即可。重新编译,成功。
ndk.dir=[ndkPath]
sdk.dir=[sdkPath]
然后进入 XposedTools ,开始配置我们编译工具。 XposedTools 已经为我们提供了一个简单的配置清单(build.conf.sample),我们照着改一下就行。
我们创建一个 build.conf 配置文件,内容如下
[General]
outdir = [编译文件的输出路径]
javadir =XposedBridge 仓库的目录
[Build]
# Please keep the base version number and add your custom suffix
version = 89 (custom build by xyz / %s) //版本号
makeflags = -j8 //编译的并行数
[GPG]
# 签名相关,可以不动
sign = release
user = 852109AA!
# Root directories of the AOSP source tree per SDK version
[AospDir]
23 = [aosp path]
# 可以配置多个
24 = [aosp path]
25 = [aosp path]
# SDKs to be used for compiling BusyBox
# Needs https://github.com/rovo89/android_external_busybox
# 不需要就不动
[BusyBox]
arm = 21
x86 = 21
armv5 = 17
走到这一步,我们的配置已经结束,但是还差一点才能 run 起来。
XposedTools 依赖于 perl,所以我们要跑起来就要有一个 perl 环境。
首次运行 perl 需要安装依赖 Config::IniFiles
perl -MCPAN -e 'install Config::IniFiles'
大概需要在安装下面的两个依赖(不同系统可能不同)
perl -MCPAN -e 'install File::Tail'
perl -MCPAN -e 'install File::ReadBackwards'
如果还不成功,按照下面的方法安装所需的模块即可
perl -MCPAN -e 'install [ModuleName]'
然后环境就配置完成了
JAVA_HOME
,要指向 jdk-1.8 的路径,因为 XposedBridge 的编译需要 java-8sdk install gradle [version]
即可拉去代码之后,配置项目的 sdk 路径:在项目目录下新建 local.properties 添加内容
sdk.dir=/home/guang/Android/Sdk
注意:
切换到 XposedTools 目录下,开始我们的编译
首先我们需要编译一下 XposedBridge
./build.pl -a java
这一步会在 编译 XposedBridge 仓库,然后将输出的 XposedBridge.apk 改名为 XposedBridge.jar 并放置在上一步配置的输出目录里面(outdir )
然后再执行下面的命令,编译整个 Xposed
./build.pl -t arm64:23
上面的是只编译 arm64 版本的 xposed , 我们可以选择编译多个版本,想下面这样
./build.pl -t x86:23
./build.pl -t arm64:all
执行完就可以在 [outdir ] 看到我们的 xposed.zip 包了
sudo apt install lib32stdc++6 lib32z1
java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0
建议使用第二种
**参考链接**
http://www.cnblogs.com/zhangchaoyang/articles/2610573.html
https://bbs.pediy.com/thread-223713.htm
https://www.jianshu.com/p/6471bab49cb1
[xposed-analysis](https://github.com/openthos/xposed-analysis/blob/master/docs/%E5%88%86%E6%9E%90%E3%80%81%E7%BC%96%E8%AF%91%E3%80%81%E5%AE%89%E8%A3%85%E3%80%81%E8%BF%90%E8%A1%8CXposed.md)