ndk命令编译android串口源码生成64位so

需求

  1. android中要使用串口,谷歌官方在github上有提供代码实例,里面有JNI的代码和串口API的java文件,工程的地址如下:
    https://github.com/cepr/android-serialport-api
  2. 要用到64位的so,但是官方下载的libserial_port.so中没有64位的,需要自己编译,但是用android studio加载它的工程会发现编译不过,会提示一大堆“Error:(27, 20) java: 程序包android.util不存在”等错误。

命令行下手动编译64位库

  1. 确定ndk所在目录,比如/opt/android/android-sdk-linux/ndk/21.3.6528147/ndk-build/
  2. 从android-serialport-api/project/jni/中拷贝出SerialPort.c SerialPort.h
  3. 生成Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_LDLIBS := -lm -llog
LOCAL_MODULE := serial_port
LOCAL_SRC_FILES := SerialPort.c
include $(BUILD_SHARED_LIBRARY)
  1. 生成Application.mk
APP_MODULES = serial_port
//APP_ABI    := armeabi-v7a arm64-v8a
APP_STL    := stlport_static
 
ifeq ($(NDK_DEBUG), 1)
    APP_OPTIM = debug
    APP_CFLAGS = -g -O0
else
    APP_OPTIM = release
    APP_CFLAGS = -O3
endif
 
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1  -std=c++0x
APP_CPPFLAGS += -fexceptions
  1. 编译
    进入放SerialPort.c的目录
    /opt/android/android-sdk-linux/ndk/21.3.6528147/ndk-build NDK_PROJECT_PATH=./ APP_BUILD_SCRIPT=./Android.mk
    生成
    ls libs/
    arm64-v8a armeabi-v7a x86 x86_64

ls libs/arm64-v8a/
libserial_port.so

编译过程遇到问题及解决方式

问题:
undefined reference to __android_log_print’

解决:
Android.mk中添加
LOCAL_LDLIBS := -lm -llog

问题:
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/opt/android/android-sdk-linux/ndk/21.3.6528147/build/core/build-local.mk:151: *** Android NDK: Aborting . Stop.
原因是不能单独用ndk-build,要带一些参数,设定当前工程目录。

解决:
添加NDK_PROJECT_PATH参数,这里我们因为是在源码目录下,直接设定为当前目录 ./
ndk-build NDK_PROJECT_PATH=./

问题:
Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-16.
Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: .//jni/Android.mk
/opt/android/android-sdk-linux/ndk/21.3.6528147/build/core/add-application.mk:88: *** Android NDK: Aborting… . Stop.
原因是要指定APP_BUILD_SCRIPT,设定Android.mk的位置

解决:
ndk-build命令中加参数APP_BUILD_SCRIPT=./Android.mk
ndk-build NDK_PROJECT_PATH=./ APP_BUILD_SCRIPT=./Android.mk

作者:帅得不敢出门

你可能感兴趣的:(Android平台,android,java,apache)