NDK移植编译&心得&ADB简单应用

来源:互联网 发布:锁定4g网络 编辑:程序博客网 时间:2024/06/07 08:33

I. 基本流程

1.设置环境变量

建议去官网下载最新版本的NDK,老版本很多宏定义缺失,比较麻烦。同时,之前用android-ndk-r10d,需要安装32位库环境。

yum install libstdc++-devel.i686yum install libzip.i686 
#!/bin/bash# environment settingexport ANDROID_NDK_PATH=/opt/android-ndk-r14bexport TOOLCHAINS_PATH=${ANDROID_NDK_PATH}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/binexport PATH=${PATH}:${TOOLCHAINS_PATH}export SYSROOT_PATH=${ANDROID_NDK_PATH}/platforms/android-22/arch-armexport LIBSTD_PATH=${ANDROID_NDK_PATH}/sources/cxx-stl/gnu-libstdc++/4.9#以下三个实际不需要export ANT_PATH=/usr/local/Cellar/ant/1.9.6/binexport ANDROID_SDK_HOME=/opt/AndroidSDKexport JAVA_HOME=/usr# user settingexport USING_WEBRTC=yes#export DEBUG=noexport CC=arm-linux-androideabi-gccexport CXX=arm-linux-androideabi-g++export AR=arm-linux-androideabi-arexport CFLAGS="-DANDROID -fPIC  -std=c++11 -ffunction-sections -funwind-tables -fstack-protector  -no-canonical-prefixes -fexceptions -frtti -marm -march=armv7-a -mtune=cortex-a8 -mfloat-abi=softfp -mfpu=neon -mthumb -fno-strict-aliasing -finline-limit=64 -Wa,--noexecstack -Wformat -Werror=format-security -g -Wall --sysroot=${SYSROOT_PATH} -I${LIBSTD_PATH}/include -I${LIBSTD_PATH}/libs/armeabi/include -I${ANDROID_NDK_PATH}/sources/android/cpufeatures/"export LDFLAGS="--sysroot=${SYSROOT_PATH} -L${LIBSTD_PATH}/libs/armeabi -lgnustl_shared -lgcc -no-canonical-prefixes -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -lstdc++ -lsupc++ -lc -lm -pthread"

只要事先运行脚本,基本能应对一般的库(包括开源库)的编译。

2.修改Makefile模板,针对EXE情况做特殊处理

GCC=$(CROSS)gccGXX=$(CROSS)g++AR=$(CROSS)arifeq ($(CROSS),arm-linux-androideabi-)ifdef EXE_TARGETCFLAGS += -pie -fPIELDFLAGS += -pie -fPIEendifendif

3.PTLIB的configure参数

注意,这里的configure文件我做了少量修改。仅个人记录用。

./configure --enable-exceptions --host=armv7-a-android --disable-openssl --disable-shmaudio --enable-shmvideo=no --disable-resolver --enable-serial=no --disable-v4l2

II. 心得

1.主要的头文件目录

/opt/android-ndk-r14b/platforms/android-22/arch-arm/usr/include
/opt/android-ndk-r14b/sources/cxx-stl/gnu-libstdc++/4.9/include

2.编译错误解决

1)部分原来是/usr/include/sys下的头文件路径可能有变化,直接在incude目录下。
2)出现链接错误时,务必用arm-linux-androideabi-nm检查下是否没实现。存在头文件与库文件不一致的现象。

2.ifaddrs.h不存在

1)使用libuv库内的 android-ifaddrs即可。部分版本可能有坑。

我自己传的下载地址:

http://download.csdn.net/detail/gogoytgo/9882241

III. ADB使用

#!/bin/bash#连接adb connect <ip>#进入shelladb shell#如果有多个链路,可以这样选择,端口缺省5555adb -s <ip>:<port> shell#传输文件adb push 1.txt /storage/emulated/0/#所有动态库需要放置在/system/lib目录下,需要赋予/system目录读写权限mount -o remount,rw /system#大多数命令需要busybox驱动,例如vi,ifconfig等busybox vi 1.txt
原创粉丝点击