ndk
wget "https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip"
arm-21-toolchain-clang-32 & arm-21-toolchain-clang-64准备
protobuf config的时候需要这两个库,用来编译成armeabi-v7a和arm64-v8a的
unzip
cd android-ndk-r16b
toolchain_dir=`pwd`/.. //设置生成路径(当前路径的上级目录)
clang-32
./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++
clang-64
./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++
此时就会在刚刚设的路径下生成,如下:
protobuf source Code
git clone https://github.com/protocolbuffers/protobuf.git
git checkout v3.10.1
git submodule update --init --recursive
check
./autogen.sh
生成目录
mkdir -p `pwd`/../libprotobuf/android //建立生成目录
build armeabi-v7a
建立脚本build_32.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"
./configure \
--host=arm-linux-androideabi \
--with-protoc=protoc \
--with-sysroot="$sysroot" \
--disable-shared \
--prefix="$build_dir/armeabi-v7a" \
--enable-cross-compile \
CFLAGS="-march=armv7-a -D__ANDROID_API__=21" \
CXXFLAGS="-frtti -fexceptions -march=armv7-a -D__ANDROID_API__=21" \
LIBS="-llog -lz -lc++_static"
make -j12
make install
执行
bash build_32.sh
此时armeabi-v7a就会在你指定的输出文件夹下生成
build arm64-v8a
同上build_64.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"
./configure \
--host=arm-linux-androideabi \
--with-protoc=protoc \
--with-sysroot="$sysroot" \
--disable-shared \
--prefix="$build_dir/arm64-v8a" \
--enable-cross-compile \
CFLAGS="-march=armv8-a -D__ANDROID_API__=21" \
CXXFLAGS="-frtti -fexceptions -march=armv8-a -D__ANDROID_API__=21" \
LIBS="-llog -lz -lc++_static"
make -j12
make install
执行
bash build_64.sh
整理:
mkdir -p ../libprotobuf/android/lib/armeabi-v7a
mkdir -p ../libprotobuf/android/lib/arm64-v8a
cp ../libprotobuf/android/armeabi-v7a/lib/libprotobuf-lite.a ../libprotobuf/android/lib/armeabi-v7a
cp ../libprotobuf/android/arm64-v8a/lib/libprotobuf-lite.a ../libprotobuf/android/lib/arm64-v8a
cp -r ../libprotobuf/android/armeabi-v7a/include ../libprotobuf/android/include
rm -rf ../libprotobuf/android/armeabi-v7a
rm -rf ../libprotobuf/android/arm64-v8a
最后:
最最后,打包好的LIb库