购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 脱离编译器,使用命令行编译so

由于在unidbg的学习过程中,我们会频繁地编译so文件来进行测试。如果每次都使用Android Studio来编译,那么需要编译器做一些除编译so以外的编译与打包APK的操作,也需要我们手动提取出APK中的so文件。为了提高效率,我们学习一下使用命令行编译so文件的方法。

首先打开IDEA,在lesson2包的同级目录中创建lesson5包,并将MainActivity.java代码复制进去。在lesson5下创建build文件夹,用于存放编译so的源代码和配置文件。

打开Android Studio,将src/main/cpp目录下的native-lib.cpp与CMakeLists.txt文件放到lesson5/build目录下,如图3—14所示。

图3—14 lesson5项目结构

由于使用cmake进行编译,因此我们还需要将Android Studio中的cmake添加到环境变量中。Android Studio SDK中的cmake路径为/root/Android/Sdk/cmake/3.10.2.4988404/bin,其中的版本号需要根据实际情况进行修改。在~/.bashrc文件末尾添加如下路径:

PATH=$PATH:/root/Android/Sdk/cmake/3.10.2.4988404/bin;export PATH;

重启终端,如果发现cmake命令已经可以在任意目录中使用,则配置成功。

对于编译脚本的配置,Google官方已在文档中编写了示例,地址为https://developer.android.com/studio/projects/configure-cmake#call-cmake-cli,读者可自行参考。

在build目录下创建build.sh文件,将示例复制到文件中,并修改如下路径:

还需修改CMakeLists.txt文件,添加如下配置:

# 配置生成so文件目标目录为项目根目录的上一层(即build目录的上级目录)

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY${PROJECT_SOURCE_DIR}/../)

# 配置构建类型为Release

set(CMAKE_BUILD_TYPE"Release")

# 指定C和C++不输出调试信息

set(CMAKE_C_FLAGS_RELEASE"${CMAKE_C_FLAGS_RELEASE}-s")

set(CMAKE_CXX_FLAGS_RELEASE"${CMAKE_CXX_FLAGS_RELEASE}-s")

个性化修改并删除所有注释后,so编译相关配置如图3—15所示。

图3—15 so编译相关配置

运行build.sh脚本,如果在build的同级目录下生成libnative-lib.so,则命令行编译成功,如图3—16所示。

图3—16 命令行编译成功 Xj9hgJ6NuuDqURRhzQrDTLro8dy05w6eO+75bX5lPgJtekI8wj0roeFz84yi86nD

点击中间区域
呼出菜单
上一章
目录
下一章
×