工具环境:

Android Studio 2.2

OpenCV-android-sdk 3.0.0


步骤:

 新建工程: 

一路默认设置,Next


创建完成:


导入module (opencv4android library, 下载的opencv-android-sdk解压目录下的\sdk\java)


新建JNI目录(是在app\scr\main这一层下面新建)


复制native文件夹


MainActivity复制内容

public class MainActivity extends AppCompatActivity {    private Button btn;    private ImageView img;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();    }    private void initView() {        btn= (Button) findViewById(R.id.btn);        img= (ImageView) findViewById(R.id.img);        btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(                        R.drawable.ic)).getBitmap();                int w = bitmap.getWidth(), h = bitmap.getHeight();                int[] pix = new int[w * h];                bitmap.getPixels(pix, 0, w, 0, 0, w, h);                int [] resultPixes=OpenCVHelper.gray(pix,w,h);                Bitmap result = Bitmap.createBitmap(w,h, Bitmap.Config.RGB_565);                result.setPixels(resultPixes, 0, w, 0, 0,w, h);                img.setImageBitmap(result);            }        });    }}

会有报错:


设置模块引用




剩下的报错,替换res里面的文件, 复制到对应路径

再新建文件:  OpenCVHelper

public class OpenCVHelper {    static {        System.loadLibrary("OpenCV");    }    public static native int[] gray(int[] buf, int w, int h);}

下面是jni文件夹里面的内容:

复制android.mk和application.mk

文件内容如下:

android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)OpenCV_INSTALL_MODULES := onOpenCV_CAMERA_MODULES := offOPENCV_LIB_TYPE := STATICifeq ("$(wildcard $(OPENCV_MK_PATH))","")include ..\..\..\..\native\jni\OpenCV.mkelseinclude $(OPENCV_MK_PATH)endifLOCAL_MODULE := OpenCVLOCAL_SRC_FILES := cn_edu_zafu_opencv_OpenCVHelper.cppLOCAL_LDLIBS +=  -lm -lloginclude $(BUILD_SHARED_LIBRARY)

application.mk

APP_STL := gnustl_staticAPP_CPPFLAGS := -frtti -fexceptionsAPP_ABI := x86_64APP_PLATFORM := android-9

这里的x86_64是在电脑模拟器上的,如果是android手机上,需要改成armeabi-v7a


新建.h文件和.cpp文件

.h文件是通过javah新建的( 见http://blog.csdn.net/yu544324974/article/details/51821853 )

gradle的配置:

根目录下的gradle.properties文件,增加一行:

android.useDeprecatedNdk=true
local.properties设置路径


app目录下的build.gradle文件

android节点下,添加

sourceSets.main.jni.srcDirs = []    //禁止自带的ndk功能    sourceSets.main.jniLibs.srcDirs = ['src/main/libs','src/main/jniLibs']    //重定向so目录为src/main/libs,原来为src/main/jniLibs    task ndkBuild(type: Exec, description: 'Compile JNI source with NDK') {        Properties properties = new Properties()        properties.load(project.rootProject.file('local.properties').newDataInputStream())        def ndkDir = properties.getProperty('ndk.dir')        if (org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)) {            commandLine "$ndkDir/ndk-build.cmd", '-C', file('src/main/jni').absolutePath        } else {            commandLine "$ndkDir/ndk-build", '-C', file('src/main/jni').absolutePath        }    }    tasks.withType(JavaCompile) {        compileTask -> compileTask.dependsOn ndkBuild    }    task ndkClean(type: Exec, description: 'Clean NDK Binaries') {        Properties properties = new Properties()        properties.load(project.rootProject.file('local.properties').newDataInputStream())        def ndkDir = properties.getProperty('ndk.dir')        if (org.apache.tools.ant.taskdefs.condition.Os.isFamily(org.apache.tools.ant.taskdefs.condition.Os.FAMILY_WINDOWS)) {            commandLine "$ndkDir/ndk-build.cmd",'clean', '-C', file('src/main/jni').absolutePath        } else {            commandLine "$ndkDir/ndk-build",'clean', '-C', file('src/main/jni').absolutePath        }    }    clean.dependsOn 'ndkClean'

externalNativeBuild 的节点删除掉
配置文件完成以后, 执行ndk-build





编译遇到这个报错:

Error:Execution failed for task ':app:ndkBuild'.
> Process 'command 'D:\env\android\android-ndk-r13/ndk-build.cmd'' finished with non-zero exit value 2

是因为android.mk里面 LOCAL_SRC_FILES 的配置的错误

可以通过命令行执行d:\env\android\android-ndk-r13\ndk-build.cmd -C src/main/jni进行调试


选择app,然后编译运行


效果:



更多相关文章

  1. Android(安卓)N调用系统安装APK方法报错原因整理及解决方案
  2. 【转】android progressbar 自定义样式
  3. Flutter Android(安卓)Studio打包安卓apk文件
  4. Android系统开发之七:添加Android(安卓)Native Service方法
  5. Android(安卓)文件操作之openFileOutput
  6. android studio 新建class文件报错Unable to parse template "Cl
  7. android studio 导入自定义编码格式
  8. To Do List
  9. AndroidStudio Frameworks detected: Android(安卓)framework is

随机推荐

  1. ActivityThread的main方法究竟做了什么?
  2. Android属性动画之第一重修炼总结
  3. Android亮屏和熄屏控制
  4. 短信的收发及在android模拟器之间实践(一)
  5. Android(安卓)9 (P) Zygote进程启动源码
  6. 高手帮你学规范!iOS和Android规范解析之提
  7. Google 停止支持 CDMA 设备
  8. Android入门之Style与Theme用法实例解析
  9. 彻底解决android读取中文txt,lrc的乱码(自
  10. Rect、RectF矩形类