一、环境要求
- ubuntu18.0.4
二、工具准备
1. 必要工具
sudo apt install autoconf automake libtool curl make g++ unzip
2. 下载NDK
使用wget命令下载NDK压缩包
wget "https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip"
3. 解压NDK
unzip android-ndk-r19c-linux-x86_64.zip
解压期间会提示 replace android-ndk-r19c/sysroot/usr/include/linux/netfilter/xt_DSCP.h? 输入 A ,然后按回车即可
4. 生成 clang32 和clang64
cd android-ndk-r19c
toolchain_dir=`pwd`/.. #设置clang 的生成路径为上级目录
#clang32 的生成
./build/tools/make-standalone-toolchain.sh \
--arch=arm --platform=android-21 \
--toolchain=arm-linux-android-clang5.0 \
--install-dir=$toolchain_dir/arm-21-toolchain-clang-32 \
--use-llvm \
--stl=libc++
#clang64的生成
./build/tools/make-standalone-toolchain.sh \
--arch=arm64 \
--platform=android-21 \
--toolchain=arm-linux-android-clang5.0 \
--install-dir=$toolchain_dir/arm-21-toolchain-clang-64 \
--use-llvm \
--stl=libc++
cd ../ #返回上级目录
此时 目录下有以下文件夹
三、下载与编译
1. 下载protobuf
这里我们使用git 下载protobuf 与其插件
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
2. 编译
- 建立脚本文件 build_armeabi_v7a.sh
make distclean
./autogen.sh
export build_dir=`pwd`/libprotobuf/android
export sysroot=`pwd`/../arm-21-toolchain-clang-32/sysroot ##前面ndk生成的clang-32路径
export PATH=`pwd`/../arm-21-toolchain-clang-32/bin:$PATH
export CC="arm-linux-androideabi-clang --sysroot $sysroot"
export CXX="arm-linux-androideabi-clang++ --sysroot $sysroot"
mkdir -p $build_dir/armeabi-v7a
./configure \
--host=arm-linux-androideabi \
--with-protoc=protoc \
--with-sysroot="$sysroot" \
--disable-shared \
--prefix="$build_dir/armeabi-v7a" \
--exec-prefix=$build_dir/armeabi-v7a \
--enable-cross-compile \
CFLAGS="-march=armv7-a -D__ANDROID_API__=21" \ #这里不要更改Android 版本
CXXFLAGS="-frtti -fexceptions -march=armv7-a -D__ANDROID_API__=21" \
LIBS="-llog -lz -lc++_static"
make -j12
make install
- 建立脚本文件 build_arm64_v8a.sh
#!/bin/bash
make distclean
./autogen.sh
export build_dir=`pwd`/libprotobuf/android
export sysroot=`pwd`/../arm-21-toolchain-clang-64/sysroot ##前面ndk生成的clang-64路径
export PATH=`pwd`/../arm-21-toolchain-clang-64/bin:$PATH
export CC="aarch64-linux-android-clang --sysroot $sysroot"
export CXX="aarch64-linux-android-clang++ --sysroot $sysroot"
mkdir -p $build_dir/arm64-v8a
./configure \
--host=arm-linux-androideabi \
--with-protoc=protoc \
--with-sysroot="$sysroot" \
--disable-shared \
--prefix="$build_dir/arm64-v8a" \
--exec-prefix="$build_dir/arm64-v8a" \
--enable-cross-compile \
CFLAGS="-march=armv8-a -D__ANDROID_API__=21" \ #这里不要更改Android 版本
CXXFLAGS="-frtti -fexceptions -march=armv8-a -D__ANDROID_API__=21" \
LIBS="-llog -lz -lc++_static"
make -j12
make install
- 执行自动编译脚本
sudo ./build_armeabi_v7a.sh
sudo ./build_arm64_v8a.sh
等待编译完成,此时进入libprotobuf/android文件夹下有两个文件夹
这就是最终的protobuf的库文件,可以将这两个文件夹拷贝进项目中接入使用