附上编译好的android ndk-FFmpeg库:

https://github.com/codeinmyself/FFmpegInAndroid

以及Ubuntu下编译运行的脚本:

https://github.com/codeinmyself/build.sh

建议初学者:

①在build.gradle中不要另起炉灶,建议保留下面:


注释的部分是设置jniLibs的路径,这样徒增复杂,不如保留默认路径(如下):


让系统自己去加载。其中jniLibs文件下面展示如下:


armeabi保存.so文件,include保存.h头文件。

②build.gradle中,下图表示适配的CPU架构:


这决定你的手机是否能运行这个应用,armeabi是目前适配最好的架构(但是android studio自带的AVD即使能兼容armeabi(sdk=5),也无法兼容你程序的minSDK(=15),因此最好用真机测试),广泛使用的是armeabi-v7a。

③CMakeList的建议:

建议CMakeList不要写死路径,尽量用系统设置的文件路径变量来代替,比如:


这样当有多个android_abi时也可以省点心。

④出现应用闪退:

log日志中虽然没有报红色错误,但是可以看到有bug:

No implementation found for native Lcom/dgut/android/MainActivity;.stringFromJNI ()Ljava/lang/String;

这个是对应的native-lib.cpp写错,

一般来说:应用一个c++函数其结构如下:(三部分)


相关探讨:http://blog.csdn.net/greenapple_shan/article/details/38504305

⑤关于如何在android项目中引用c++头文件和so库,下面链接的博客讲的很详细了:

https://www.cnblogs.com/guoguibiao/p/8281664.html

⑥如果没有在CMakeList中添加下面这句话,就会出现c++头文件中的引用找不到:

include_directories(src/main/cpp/include)

你会发现,头文件中的引用,如:

#include "libavutil/samplefmt.h"
应该写成:

#include "../libavutil/samplefmt.h"
但是每个编译好的c++库都是这样写的,如下图:


这里其实就是用到了共享库的概念,要不然得一个个添加“../”。

include_directories(src/main/cpp/include)
上面就是用CMake添加共享库。

更多相关文章

  1. Android文件系统的制作
  2. Android(安卓)OkHttp4 RequestBody.create()过时解决办法 kotlin
  3. android 编译碰到的问题及解决办法:(ubuntu下编译)
  4. android获取本地视频缩略图和时长的两种方法
  5. 探索react-native run-ios(android)
  6. Android模块化编译
  7. java.lang.RuntimeException: Unable to start activity Compone
  8. Android(安卓)Studio导入Github项目时Plugin错误的解决办法
  9. android 引入 iconv 库

随机推荐

  1. Hack4-自定义PreferenceActivity界面
  2. Android图片缩放总结及比较
  3. Android launcher -- launcher源码修改 1
  4. Android调试高德SDK,如何获取SHA1?
  5. Android 使用模拟位置(支持Android 6.0)
  6. Android(安卓)Studio编译jar架包必看
  7. Android一次刷机
  8. android AIDL通信
  9. Yahoo 也要推 Android(安卓)手機,Yahoo Ph
  10. 图解Android、iOS、WP7三大手机操作系统