随着处理器制造工艺的不断进步,和Android系统的不断发展,最近出了arm64-v8a的架构,由于项目中用到了speex的第三方语音编解码的动态库,其他架构的处理器暂不用说,一切正常,唯独到arm64-v8a这里出问题了,在Android5.0 arm64位的手机上使用语音会报错,关于其他架构的.so文件编译不再赘述,网上都有资料。废话少说,直接上步骤:
1.下载android-ndk-r10e-windows-x86_64并解压,这个支持arm64 -v8a的编译,之前的版本都不行,我之前用了android-ndk32-r10-windows-x86_64,结果后来编译的时候报错Android NDK: NDK Application 'local' targets unknown ABI(s): arm64-v8a 所以要使用最新的。
2.可以直接在Eclipse配置NDK的编译环境,而不必使用Cygwin,项目右键-->Properties-->Builder-->New-->选择Program,Main选项卡里面设置NDK的Location,Browse File System选择ndk-build.cmd的路径,Working Directory选择项目下jni文件夹路径,这里选Browse WorkSpace,如图:
切换到Refresh选项卡,选择如下
切换到Build Options选项卡,选择如下
最后别忘记点OK,回到Properties,把当前新建的NDK_Builder Up到最上面
这样,就配置了NDK的编译环境。
3.jni下的Application.mk文件需要修改成APP_ABI := armeabi armeabi-v7a arm64-v8a ……添加了arm64-v8a
4.Project选择Clean或者Build Project都可以自动把jni下的源文件编译成.so文件。
以上步骤顺利执行过后查看libs目录,下面的arm64-v8a文件夹下生成了libspeex.so文件。