美文网首页
Xposed 编译(三) - Xposed 编译

Xposed 编译(三) - Xposed 编译

作者: hunter886 | 来源:发表于2018-08-21 16:15 被阅读825次

Android 编译成功之后,开始我们的重头戏,编译 Xposed

下载 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 。

<project> 标签里面的 revision 是指定这个仓库的编译分支

xposed_sdk23.xml

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote name="github" fetch="https://github.com" />
  <project path="frameworks/base/cmds/xposed" name="rovo89/Xposed" remote="github" revision="master"/>
  <remove-project name="platform/art" />
  <project path="art" name="rovo89/android_art" remote="github" revision="xposed-marshmallow"/>
</manifest>

移动成功之后,我们回到 [aospPaht] 下 执行 repo sync 来同步代码,如果提示同步 art 失败可以手动删除 art 仓库,重新执行 repo sync
同步成功之后,我们进行下一步。

配置编译工具 XposedTools

到这里我们的代码还差一个 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 起来。

配置 perl 环境

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]'

然后环境就配置完成了

配置 Android 环境

  • 安装 java 这一步应该在编译 android 的时候已经配置好了。记得配置一下 JAVA_HOME,要指向 jdk-1.8 的路径,因为 XposedBridge 的编译需要 java-8
  • 安装 sdk, 这个就不说了,不懂的话自行搜素
  • 安装 gradle,安装较慢的话,建议使用 sdkman,然后来管理 gradle
    参考 sdkman。sdkman 安装成功之后,然后执行 sdk install gradle [version] 即可

编译 XposedBridge

拉去代码之后,配置项目的 sdk 路径:在项目目录下新建 local.properties 添加内容

sdk.dir=/home/guang/Android/Sdk

注意:

  1. 不要顺手添加 ndk 的路径,会出现了奇怪的错误(不知道是不是个例)
  2. 如果你安装的有 Android Studio,可以使用 Android Studio 打开项目,它自动就会帮你添加上了 sdk 的路径配置,但是可能引入新的问题,出现问题可以删除项目中的 .iml 文件就可以了

编译 Xposed

切换到 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 包了

错误处理

  1. XposedBridge 编译提示找不到 build-tools/[version]/ aapt 文件
    原因是 android sdk 的文件都是在 32 位的库编译的,在 64 位系统上无法找到对应的库。
sudo apt  install lib32stdc++6 lib32z1 
  1. 'YAML' not installed'
    尝试使用 cpan 安装 YAML 模块,如果失败,尝试直接下载 YAML 的二进制文件,使用本地安装 perl 模块的方法
  2. 在编译 XposedBridge 的时候出现 java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0
    这个是因为 java 版本和 gradle 版本不匹配,如果你先编译的 Android 6.0 及一下版本的话,需要的是 java 1.7。 但是最新的 XposedBridge 需要 java1.8。 所以我们修改 gradle 使用 java 1.8 就可以了。
    两种方式
    方法一:在 HOME_DIRECTORY 中的 .gradle 目录中的 gradle.properties 中设置 org.gradle.java.home = [java8 path]
    方法二:配置环境变量 JAVA_HOME 变量指向 openjdk-8 的目录
建议使用第二种

**参考链接**
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)

相关文章

网友评论

      本文标题:Xposed 编译(三) - Xposed 编译

      本文链接:https://www.haomeiwen.com/subject/rbfriftx.html