Qt On Android + protobuf3的使用
来源:互联网 发布:清理后台的软件 编辑:程序博客网 时间:2024/06/02 19:43
一、材料准备
1、protobuf下载
git链接:https://github.com/google/protobuf
release链接:https://github.com/google/protobuf/releases/tag/v3.3.0
本人使用的的是protobuf-3.3.0
2、NDK下载
ndk下载
3、QT与安卓环境搭建
参照大神的博客:博客链接
二、设置ndk
将下载的ndk(android-ndk-r14b-linux-x86_64.zip)解压到指定目录,例如/home/linux/works/android/ndk/
参考如图
三、protobuf编译
1、推荐使用ubuntu编译,使用真机或者VM均可。
2、解压下载到的protobuf-master.zip到你的指定路径,例如我的是 /home/linux/works/protobuff/protobuff-master
参考如图
3、编译前的准备
编译protobuf需要一些工具,比如
* autoconf
* automake
* libtool
* curl (used to download gmock)
* make
* g++
* unzip
在ubuntu上面,可以直接输入命令进行安装 sudo apt-get install autoconf automake libtool curl make g++ unzip
4、先编译ubuntu主机上面使用的
执行命令
(1) ./autogen.sh
(2) ./configure --prefix=/home/linux/works/protobuff_linux 注意:prefix是指定安装目录,按照自己的更改
(3) make
(4)make check 注意:这个不是必须的,即使检查失败,也还是能安装,只是部分不能使用
(5)make install
附:编译给arm用的也简单,先编译给ubuntu用的,随后在2步的时候输入如下参考命令即可,其他一样,CC与CXX是自己arm使用的工具链
./configure --prefix=/home/linux/works/protobuff/protobuff_arm --host=arm-linux CC=/home/linux/works/armgcc/armgcc6.3.1/bin/arm-linux-gnueabihf-gcc CXX=/home/linux/works/armgcc/armgcc6.3.1/bin/arm-linux-gnueabihf-g++ --with-protoc=/home/linux/works/protobuff_linux/bin/protoc
5、编译给android使用的so库
注意,我尝试过使用给arm编译proto的方式来编译给android使用的,但是提示我c编译编译的东西不可执行。百度了有用NDK配合.mk方式来编译,我没有成功过,不过下面这种方式是能够成功的,建议照着下面的做。
编写脚本,填写如下内容(我使用过的)
#!/bin/shcd /home/linux/works/probuf_ndk/protobuf-masterNDK_HOME="/home/linux/works/android/ndk/android-ndk-r14b"export SYSROOT=$NDK_HOME/platforms/android-21/arch-armexport PREBUILT=$NDK_HOME/toolchains/arm-linux-androideabi-4.9export LDFLAGS="--sysroot=$SYSROOT"export LD="$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/bin/ld $LDFLAGS"export LIBS="-llog $NDK_HOME/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_static.a"export CPPFLAGS=""export INCLUDES="-I$NDK_HOME/sources/cxx-stl/gnu-libstdc++/4.9/include/ -I$NDK_HOME/platforms/android-9/arch-arm/usr/include/ -I$NDK_HOME/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/"export CXXFLAGS="-march=armv7-a -mfloat-abi=softfp -DGOOGLE_PROTOBUF_NO_RTTI --sysroot=$SYSROOT"export CCFLAGS="$CXXFLAGS"export CXX="$PREBUILT/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ $CXXFLAGS"export CC="$PREBUILT/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc $CCFLAGS"echo "here"echo $NDK_HOMEecho $CC echo $CXXecho "end"./autogen.sh./configure --host=arm-linux-androideabi --with-sysroot=$SYSROOT --enable-cross-compile --with-protoc=/home/linux/works/protobuff_linux/bin/protoc --disable-static --enable-shared CXX="$CXX" CC="$CC" LD="$LD"make -j4cp -v /home/linux/works/probuf_ndk/protobuf-master/src/.libs/* /home/linux/works/protobuff/protobuff_android其中需要注意的是
1、指定NDK的路径,设置NDK_HOME=你的NDK路径
2、将这个脚本xx.sh与解压的protobuf-master放在一起,注意我填写的protobuf-master的路径,最开的cd命令与最后面的cp命令,均按照自己的实际改一下
3、倒数第三行命令中的
--with-protoc=/home/linux/works/protobuff_linux/bin/protoc其中的=号后面的protoc的路径需要根据你自己的更改一下
脚本新,(建议的,暂未测试)
#!/bin/shcd /home/linux/works/probuf_ndk/protobuf-masterNDK_HOME="/home/linux/works/android/ndk/android-ndk-r14b"export SYSROOT=$NDK_HOME/platforms/android-21/arch-armexport PREBUILT=$NDK_HOME/toolchains/arm-linux-androideabi-4.9export LDFLAGS="--sysroot=$SYSROOT"export LD="$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/bin/ld $LDFLAGS"export LIBS="-llog $NDK_HOME/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_static.a"export CPPFLAGS=""export INCLUDES="-I$NDK_HOME/sources/cxx-stl/gnu-libstdc++/4.9/include/ -I$NDK_HOME/platforms/android-9/arch-arm/usr/include/ -I$NDK_HOME/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/"export CXXFLAGS="-march=armv7-a -mfloat-abi=softfp -DGOOGLE_PROTOBUF_NO_RTTI --sysroot=$SYSROOT"export CCFLAGS="$CXXFLAGS"export CXX="$PREBUILT/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ $CXXFLAGS"export CC="$PREBUILT/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc $CCFLAGS"echo "here"echo $NDK_HOMEecho $CC echo $CXXecho "end"./autogen.sh./configure --prefix=/home/linux/works/protobuff/protobuff_android --host=arm-linux-androideabi --with-sysroot=$SYSROOT --enable-cross-compile --with-protoc=/home/linux/works/protobuff_linux/bin/protoc --disable-static --enable-shared CXX="$CXX" CC="$CC" LD="$LD"make -j4make install
参考如图
6、开始编译
给sh添加可执行权限 sudo chmod +x xx.sh
执行sh ./xx.sh
等待一会即可,完成过后,会将生成的库拷贝到你的指定文件夹中去
四、QT+protobuf编译android
我把生成的库全部拷贝到windows上面使用,路径在
1、新建工程,略
2、pro配置
参考配置
unix:android{
3、给apk添加额外的so库INCLUDEPATH += D:\protobuf\protobuff_android\includeLIBS += -L"D:\protobuf\protobuff_android\lib" \-lprotobuf \-lprotobuf-lite \-lprotoc
}
如果不添加的话,就不会拷贝到apk中,后面在运行的时候就会出问题
添加方法:项目->Build Android APK->Addtional Libraries->add
实例如图
4、可以开始编译了
我的工程如下
其中 .pb.h与.pb.cc是编写 xxx.proto后经过protoc生成的
生成参考命令如下,可以考虑写成一个bat来调用
D:\protobuf\protobuf_win_3.3.0\bin\protoc.exe --cpp_out=./ messages.proto
pause
其中的messages.proto就是我自己编写的proto,注意前面的protoc.exe则根据自己的实际情况更换路径
参考如图
现在编译,应该不会出现什么意外情况了,完成后直接安装到手机即可运行。
如果有遇到问题,请留言,按理来说,用cywin也能编译,只是要主要把一些要用的的库上,其他的使用如上。
附一些参考链接:
1、使用NDK编译protobuf,没有使用MK的方式,使用脚本。链接:https://stackoverflow.com/questions/44773136/google-protobuf-and-android-ndk,点击打开链接
2、windows编译protobuf参考,链接:http://blog.csdn.net/imilli/article/details/53015885,点击打开链接
- Qt On Android + protobuf3的使用
- Qt On Android + protobuf3的使用
- QT On IOS + protobuf3的使用
- Protobuf3 使用..
- Objective-C环境的protobuf3.0.0使用
- netty4 tcp与protobuf3的整合使用。
- Qt on Android的数据库使用(read-only错误)
- iOS protobuf3.1.0使用
- retrofit配合使用protobuf3
- python3 使用 protobuf3 序列化踩过的坑
- 在iOS中Protocol Buffer(Protobuf3.3.0)的使用
- #Qt on android#使用Qt 获取GPS信号
- Qt on android 播放视频的实现
- Qt on Android 的 SSL 支持
- protobuf3在php中的使用
- 谈谈Qt on Android
- QT on Android开发
- 使用QT实现DREAM:Building on Linux for Android
- 数数
- 欢迎使用CSDN-markdown编辑器
- Mybatis(二)— 使用Mapper动态代理方式进行开发
- cache浅析
- 剑指offer面试题56 链表中环的入口节点(java实现)
- Qt On Android + protobuf3的使用
- session机制解析
- JUC原子类-03之 AtomicLongArray原子类
- CSS_导航栏+固定浮动的回到顶部按钮
- VS环境下实现一个简单的三子棋游戏
- 嵌入式学习网站推荐
- ajax获取servlet发送的数据
- ubuntu下将本地项目上传到github托管
- 二十多种视频前景提取的算法