最近做一个C/S,多端连服务器。公司又死板,还在用Win7,好在整个系统我一个人设计,我决定在被跨系统通信逼疯前使用最新版protobuff!
只可惜出师未捷,一开始就卡在Android版protobuff上了。败毒一堆文章无效,最后还是在360上找到两篇靠谱点的。
参考文章:
https://blog.youkuaiyun.com/weixin_28927079/article/details/107039924
https://bbs.youkuaiyun.com/topics/392257691?page=1
具体步骤如下:
1.下载protobuff-3.13.0的代码,解压。
2.安装Android Studio,并安装CMake
并将其路径写入PATH。
3.在protobuff-3.13.0目录下建立cmakebuild\armeabi-v7a\sharedSTL\Debug目录,进入该目录,打开一个CMD窗口,输入以下:
SET ndk_root=C:/AndroidSDK/ndk/21.3.6528147
SET gernerator="Ninja"
cmake -Dprotobuf_BUILD_SHARED_LIBS=OFF -DCMAKE_VERBOSE_MAKEFILE=ON -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_EXAMPLES=ON -DCMAKE_TOOLCHAIN_FILE=%ndk_root%/build/cmake/android.toolchain.cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=lib/armeabi-v7a/Debug -DANDROID_NDK=%ndk_root% -DANDROID_TOOLCHAIN=clang -DANDROID_ABI=armeabi-v7a -DANDROID_NATIVE_API_LEVEL=21 -DANDROID_STL=c++_shared -DANDROID_LINKER_FLAGS="-landroid -llog" -DANDROID_CPP_FEATURES="rtti exceptions" -DCMAKE_GENERATOR=%gernerator% ../../../../cmake
这一步执行成功后,执行
cmake --build . --target libprotobuf
cmake --build . --target libprotobuf-lite
生成相应的库。
注意:
1.protobuf_BUILD_STATIC_LIBS已废。
2.Linux下,使用
export ndk_root=<...>
-DCMAKE_TOOLCHAIN_FILE=$ndk_root/build/cmake/android.toolchain.cmake
这样的格式。
另Linux下可能不是找Visual Studio,所以应该没有Nvidia错误,可能不需要设置ninja。(未实际测试)
===================华丽的分割线=====================
或者做成这样
不要异想天开同一个库不同的名,那样的话其它ABI也会去找对应的库。您context估计没用,会自动skip不匹配的库。