一般而言,编译 apk
直接用 android studio
就可以了。不过如果是希望自动编译,可以使用 Jenkins
这个开源工具。
官网:https://jenkins.io/
然后安装的话,官网也提供的好几种方式。推荐使用Docker
容器。不过这个玩意我没有使用过。
大致步骤可以参考这个:【转】Mac中jenkins的使用——自动构建
主要说一下需要注意的地方:
首先是环境:
- 本地需要配置
gradle
环境变量。【如果不配置,应该也可以,但是后续操作步骤不一样】 - 本地有
JDK
以及Android SDK
。【JAVA_HOME,ANDROID_HOME
可以不配置,没有什么影响】
然后Jenkins
里面可以不用进行任何配置以及插件安装。任何插件都可以不需要的。
然后就是在Jenkins
里面新建任务。
直接构建一个自由风格的任务即可。
构建的时候选择参数化构建,选择字符参数。可以设置默认值。
然后在任务里面 build
这一个步骤里面选择执行shell
命令。
echo "start ############################$(date)"
echo "SOURCE_PATH: "$SOURCE_PATH
if [ "123${SOURCE_PATH}" = "123" ]
then
echo '源码路径未指定'
exit 0
else
echo '源码路径为:'${SOURCE_PATH}
fi
cd ${SOURCE_PATH}
echo "after cd: "$(pwd)
if [ "abc${MODULE}" != "abc" ]
then
echo "module===$MODULE"
echo "only build module ${MODULE}"
gradle -p $MODULE clean build
else
echo "build the full project!"
gradle clean
gradle build
fi
echo "end ############################$(date)"
然后在每次触发的时候,填入需要编译的项目以及模块的名称即可。
如果是自动化构建的话,这两个参数就写死。然后让Jenkins
每次都编译这个项目就可以了。
如果当前项目是需要编译生成 so
文件的,也不用特别的配置。只要在对应的module
的 build.gradle
里面配置一个ndk{...}
即可。
android {
compileSdkVersion 28
defaultConfig {
// ....
externalNativeBuild {
cmake {
cppFlags "-std=c++11"
}
}
// ndk编译生成.so文件
ndk {
// 生成的so名字
moduleName "native-lib"
// 输出指定体系结构下的so库。
abiFilters "arm64-v8a", "armeabi-v7a", "x86", "x86_64"
}
}
buildTypes {
release {
// ....
}
}
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
}
}
}
dependencies {
// ....
}
配置好 build.gradle
之后,执行 gradle -p app build
会自动编译出对应的so
文件的。
Gradle
命令参考:Android Gradle 技巧之二: 最爱命令行
NDK
配置参考:Android Studio工程引用第三方so文件
简单总结就是,使用的话,就在对应的module
的lib
目录下拷贝对应的 so
文件进去。然后在对应的 build.gradle
的android
节点里面配置一下即可。
android {
// ...
sourceSets {
main {
// 1. 配置在根目录libs下可以加载第三方so库, (最好不要创建jniLibs, 在众多的开源库中可能会引起冲突,还没发现)
// 2. 运行时会自动将libs目录下的so库拷贝到指定目录
// 3. 如果自己创建的so不需要重新编译,可以将(app/build/intermediates/transforms)生成的so拷贝到这个目录
jniLibs.srcDirs = ['libs']
// 如果是单个文件夹 可以直接这样如下配置
// jniLibs.srcDir 'libs'
}
}
}