medaRTC4.0_android版编译记录
- 一、准备编译环境
下载地址:Download Android Studio and SDK tools | Android Developers
我下载的时候是:Android Studio Chipmunk | 2021.2.1 Patch 1 for Windows 64-bit (929 MiB)
下载好后,直接安装即可,配置SDK(29)和NDK(21),这些工程编译时会自己下载,但编译依赖的静态库时最好用同样版本的NDK,这些静态库是在Linux下用编译的,Linux下的NDK版本最好选成一样;
- 二、用AS打开工程开始编译:
这里有两个工程:metapushstream4_android 和 metaplayer4_android
-
- metapushstream4_android编译:
(1)、安装ninja,如果没安装或找不到,编译会提示错误:[CXX1410]
D:\OpenSource\metaRTC\Release\4.0\metartc4.0-b0-android\android\metapushstream4_android\app\.cxx\Debug\3p1em3n5\arm64-v8a\android_gradle_build.json debug|arm64-v8a : expected buildTargetsCommandComponents command 'ninja.exe' to exist
一是可能没安装ninja,如果没有安装先进行安装:windows 安装ninja, 第二种简单点。
二是可能路径不对:手动打开提示中的这个文件:android_gradle_build.json
{
"buildFiles": [
"D:\\OpenSource\\metaRTC\\Release\\4.0\\metartc4.0-b0-android\\android\\metapushstream4_android\\app\\src\\main\\cpp\\CMakeLists.txt"
],
"cleanCommandsComponents": [
[
"C:\\ProgramData\\chocolatey\\bin\\ninja.exe",
"-C",
"D:\\OpenSource\\metaRTC\\Release\\4.0\\metartc4.0-b0-android\\android\\metapushstream4_android\\app\\.cxx\\Debug\\3p1em3n5\\arm64-v8a",
"clean"
]
],
"buildTargetsCommandComponents": [
"C:\\ProgramData\\chocolatey\\bin\\ninja.exe",
"-C",
"D:\\OpenSource\\metaRTC\\Release\\4.0\\metartc4.0-b0-android\\android\\metapushstream4_android\\app\\.cxx\\Debug\\3p1em3n5\\arm64-v8a",
"{LIST_OF_TARGETS_TO_BUILD}"
],
"libraries": {
"push::@6890427a1f51a3e7e1df": {
"toolchain": "toolchain",
"abi": "arm64-v8a",
"artifactName": "push",
"output": "D:\\OpenSource\\metaRTC\\Release\\4.0\\metartc4.0-b0-android\\android\\metapushstream4_android\\app\\build\\intermediates\\cxx\\Debug\\3p1em3n5\\obj\\arm64-v8a\\libpush.so",
"runtimeFiles": []
}
},
"toolchains": {
"toolchain": {
"cCompilerExecutable": "E:\\Android\\SDK\\ndk\\21.4.7075529\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\clang.exe",
"cppCompilerExecutable": "E:\\Android\\SDK\\ndk\\21.4.7075529\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\clang++.exe"
}
},
"cFileExtensions": [],
"cppFileExtensions": [
"cpp"
]
}
自动构建是这个样子的,报错的是buildTargetsCommandComponents 这个子项,把两个红框处的路径改成前面安装的ninja目录,不太清楚作者是在哪里配置ninja的默认目录的,在工程里也没找到。
- 、编译依赖静态库,没有会提示错误:
ninja: error:
'D:/OpenSource/metaRTC/Release/4.0/metartc4.0-b0-android/android/bin/lib_android/arm64-v8a/libmetartc4.a', needed by 'D:/OpenSource/metaRTC/Release/4.0/metartc4.0-b0-android/android/metapushstream4_android/app/build/intermediates/cxx/Debug/3p1em3n5/obj/arm64-v8a/libpush.so', missing and no known rule to make it
这里一共有两个静态库需要在工程外编译(libmetartc4.a、libmetartccore4.a)
编译libmetartc4.a:
源代码在metartc4.0-b0-android\android\libmetartc4目录,要在linux下运行该目录下的cmake_android.sh批处理,我直接用windows10带的ubuntu环境编译。
a、安装cmake,安装命令:
sudo apt install cmake
b、安装ndk,NDK各个版本链接:
https://dl.google.com/android/repository/android-ndk-r21d-linux-x86_64.zip
解压到指定目录即可,并更新批处理文件中的ndk路径:
NDK_ROOT=/home/zl/android/ndk/ndk-r21e/android-ndk-r21e
rm -rf build
mkdir build
cd build
#armeabi armeabi-v7a arm64-v8a x86_64
ARCH=arm64-v8a
API=29
cmake -DCMAKE_TOOLCHAIN_FILE=$NDK_ROOT/build/cmake/android.toolchain.cmake -DANDROID_NDK=$NDK_ROOT -DCMAKE_SYSTEM_NAME=Android -DANDROID_PLATFORM=android-${API} -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=${ARCH} -DAndroid=ON -DANDROID_STL=c++_static -DCMAKE_CXX_STANDARD=11 -DANDROID_NATIVE_API_LEVEL=${API} ..
make
if [ ! -d "../../bin/lib_android" ] ; then
mkdir -p ../../bin/lib_android
fi
if [ ! -d "../../bin/lib_android/$ARCH" ] ; then
mkdir -p ../../bin/lib_android/$ARCH
fi
cp libmetartc4.a ../../bin/lib_android/$ARCH
c、执行编译:
sudo ./cmake_android.sh
成功后在如下目录生成libmetartc4.a
编译libmetartccore4.a:
源代码在metartc4.0-b0-android\android\libmetartccore4目录,要在linux下运行该目录下的cmake_android.sh批处理,编译方法同libmetartc4.a。
AS工程默认配置编译arm64-v8a","x86_64"这两种架构,根据自己需要调整并编译对应的静态库。
AS编译,前述编译完成后,就可成功编译了。新版的AS不熟,apk找了半天,在这个地方找到了。
metaplayer4_android编译:同metapushstream4_android编译。
三、 第三方依赖库编译:
主要在低版本Android环境开发,还要编译armeabi armeabi-v7a 下的依赖库,还没搞完,搞完了再补充。