基于NCNN的Android应用程序环境搭建

Android Studio安装

直接下载Android Studio压缩包,解压放置到合适的位置,命令行调用bin目录下的studio.sh即可运行(相当于绿色软件)。为方便调用,在用户环境变量文件~/.bashrc中加入下述命令,即可在任意控制台内使用studio.sh调用

export ANDROID_HOME=/usr/local/android-studio/bin
export PATH=$PATH:$ANDROID_HOME

安装Android SDK,NDK,Gradle

Android SDK安装

使用 studio.sh运行android studio,提示找不到SDK,不用管一直向下,用Android SDK Manager自动下载相应的版本

NDK安装

单独下载与使用,主要利用它将C++代码编译成.so文件提供给Android调用,这里将其加入到AS中作为外部工具

Gradle安装

AS打开一个工程时,会先读取{your project}/gradle/wrapper/gradle-wrapper.properties 文件,从而知道这个工程需要的gradle版本(由下图最后一句决定),然后就会去保存gradle的文件夹GRADLE_USER_HOME去查看是否存在这个版本的gradle,不存在则会去distributionUrl去下载

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

(1)因此,首先修改gradle-wrapper.properties中的gradle的版本,改成想要的,然后去https://services.gradle.org/distributions/下载对应的版本(在线下载太容易成功)

(2)打开项目,此时AS会自动下载gradle,并创建好目录,此时直接退出,可得到gradle的创建目录

linux:~/.gradle/wrapper/dists
windows: C:\users\{user name}\.gradle\wrapper\dists

将下载的gradle放入对应目录下(一堆乱码文件夹下),不要解压。

错误解决1: 当新建项目clean project等操作时会出现下列问题:

Error:Execution failed for task ‘:app:preDebugAndroidTestBuild’.

> Conflict with dependency ‘com.android.support:support-annotations’ in project ‘:app’. Resolved versions for app (26.1.0) and test app (27.1.1) differ. See https://d.android.com/r/tools/test-apk-dependency-conflicts.html for details.

此时需将下面命令添加到 app/build.gradle中

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

错误解决2:AS报错Configuration on demand is not supported by the current version of the Android Gradle, Suggestion: disable configuration on demand by setting org.gradle.configureondemand=false in your gradle.properties file or use a Gradle version less than 4.6.

解决方案1(不好用,因此本来也小于4.6):打开gradle-wrapper.properties文件,修改distributionUrl参数,将版本修改为低于4.6

解决方案2(gradle4.1时亲测好用)

a. 打开gradle.properties文件,共有两个文件global properties和project properties,将其中

org.gradle.configureondemand修改为false或删除/注释该语句

b. 通过File菜单,点击settings,找到build, execution, deployment中的compiler,将其中的Configure on demand取消勾选。

Android JNI开发

试验版本:Android Studio 3.0.1,NDK版本:android-ndk-r15c

创建JNI文件夹

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

创建JNI类

  1. 添加javah工具链File->Setting->Tools->External Tools->“+”进入页面

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

Program:$JDKPath$\bin\javah.exe
Parameters:-classpath . -jni -d $ModuleFileDir$\src\main\jni $FileClass$
Working directory:$ModuleFileDir$\src\main\Java
注释:
-classpath classes 指明类所在的位置
-jni com.jni.jnitest.JNITest 类的绝对路径
-d 产生的.h文件放到指定目录下;

2.添加JNI的Java接口

在项目中添加Java调用接口类,其中loadlibrary用来加载之后JNI生成的动态库,带有native的函数为JNI接口

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

使用之前添加的javah工具编译生成JNI接口的.h文件

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

正确结果如下所示:

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

3. 创建JNI的.cpp、Android.mk、Application.mk

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

其中.cpp文件将通过javah生成的.h文件复制进去,并将函数的参数补全,然后完成函数的定义即可。Android.mk为工程配置文件,例子如下:(ncnn+mobilenet_ssd的mk文件)

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

Application.mk文件例子如下所示:

《基于NCNN的Android应用程序环境搭建》

相关配置

  1. 修改app下的build.gradle文件

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

2.项目下的gradle.properties文件,添加代码如下:

android.useDeprecatedNdk=true

执行ndk-build

采用与javah一样的方法,将ndk-build加入外部工具中

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

选中JNI类右键->New->External Tools->ndk-build,结果如图:

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

Android Studio下的OpenCV配置

下载好Opencv4Android的SDK

作为Module导入Android Studio

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

修正导入后的错误

将app目录下的build.gradle文件和openCVLibrary320 module 下的build.gradle以下这几项改成一致(改成和app目录下build.grale文件一样即可)

compileSdkVersion
buildToolsVersion
minSdkVersion
targetSdkVersion

加入依赖项

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

加入动态库

将Opencv SDK 包下SDK目录下的native文件夹下的lib文件夹复制到JNI生成的libs文件夹中(此步骤用于保证将opencv的动态库打包进最后生成的apk中)

NOTE:使用说明,使用时需要使用下面的代码进行初始化

《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》
《基于NCNN的Android应用程序环境搭建》

Android Studio生成发布版Release

Reference Website:

https://blog.csdn.net/to_perfect/article/details/69048419blog.csdn.net

    原文作者:江小鱼
    原文地址: https://zhuanlan.zhihu.com/p/72152368
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞