一、写在前面
以下的步骤、流程都是基于MNN的文档,再结合自己的实践得出的,仅作为参考。
博主的环境是windows10专业版
MNN文档
MNN的Github仓库地址
二、下载MNN-3.0.0主库
在GitHub仓库进行项目克隆,截至2024.12.25,最新版本就是为3.0.0:
bash
git clone https://github.com/alibaba/MNN.git
三、环境安装
在windows下面交叉编译MNN对环境有要求,主要是:
- Android Studio
- NDK
- CMake >= 3.10
- JDK 11
3.1、下载Android Studio
安装参考这篇博客:
Android Studio安装流程
由于只是利用Android Studio来编译MNN库,所以链接当中的步骤只需要看到应用安装完成之后即可。
3.2、Android Studio 当中 NDK 的安装
1、使用Android Studio打开克隆的MNN工程的项目文件
路径如下:
D:\DeskTop\MNN\project\android\demo
选择这个demo文件夹,然后打开即可。
2、使用SDK Manager安装NDK
(1)按照图中步骤,点击即可。有几点需要注意
- 选择好安装路径,后续设置环境变量是需要用到这个路径的
- 选择好需要安装的内容,这里指的是NDK
- 安装的时候注意网络环境,能科学就科学
如下就是安装完成了:
(2)设置环境变量
安装好的NDK还无法直接使用,需要设置环境变量,
然后在系统变量这里新建如下:
- 变量名:ANDROID_NDK
- 变量值:D:\MyApplication\Android\Sdk\ndk\28.0.12674087
在箭头处点击编辑,然后填入安装的NKD路径即可。之后确认设定,可以在powershell当中进行验证,进入到ndk的路径下,然后执行
bash
.\ndk-build.cmd --version
如果是在Android Studio当中进行安装的,还需要重启应用。
3.3、Cmake下载以及系统变量配置
打开cmake官网,然后选择大于要求版本的cmake即可:
之后将cmake文件夹下面的bin文件夹路径添加到系统变量当中即可:
3.4、JDK11的安装
JDK的版本要求是MNN-3.0.0的工程要求的,安装的流程参考下面的链接:
JDK11安装流程
四、Andriod Studio配置
新安装的Andriod Studio使用的JDK是最新的,与MNN3.0.0的安卓demo使用的JDK版本不一样,在上一节我们安装了JDK11,配置了环境变量,并且也在cmd当中确认了安装是成功的。
4.1 配置JDK版本
按照图上步骤配置JDK11,选择JDK11的路径即可。
4.2 配置NDK路径
还记得我们之前使用SDK Manager按照的NDK吗,此时找到demo项目根目录下面的local.properties文件,然后配置sdk.dir和ndk.dir的路径:
4.3 Studio编译配置的解决方式:
之后点击下图的,继续编译即可:
之后就会打开设备模拟器。
然后编译apk应用,具体如下:
这里编译可能会遇到报错如下:
> Task :app:compileDebugUnitTestJavaWithJavac FAILED
D:\DeskTop\MNN\project\android\demo\app\src\test\java\com\taobao\android\mnndemo\ExampleUnitTest.java:3: 错误: 程序包org.junit不存在
import org.junit.Test;
^
D:\DeskTop\MNN\project\android\demo\app\src\test\java\com\taobao\android\mnndemo\ExampleUnitTest.java:5: 错误: 程序包org.junit不存在
import static org.junit.Assert.*;
^
D:\DeskTop\MNN\project\android\demo\app\src\test\java\com\taobao\android\mnndemo\ExampleUnitTest.java:13: 错误: 找不到符号
@Test
^
符号: 类 Test
位置: 类 ExampleUnitTest
D:\DeskTop\MNN\project\android\demo\app\src\test\java\com\taobao\android\mnndemo\ExampleUnitTest.java:15: 错误: 找不到符号
assertEquals(4, 2 + 2);
^
符号: 方法 assertEquals(int,int)
位置: 类 ExampleUnitTest
4 个错误
> Task :app:compileDebugAndroidTestJavaWithJavac
> Task :app:compileDebugAndroidTestSources
> Task :app:dexBuilderDebugAndroidTest
> Task :app:packageDebug
> Task :app:assembleDebug
> Task :app:mergeDexDebugAndroidTest
> Task :app:packageDebugAndroidTest
> Task :app:assembleDebugAndroidTest
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:compileDebugUnitTestJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 4m 49s
55 actionable tasks: 35 executed, 20 up-to-date
解决办法是通过修改 app/build.gradle 文件来解决这个问题:
dependencies {
// 现有的依赖保持不变
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:2.0.4'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:cardview-v7:28.0.0'
// 添加以下测试相关依赖
testImplementation 'junit:junit:4.12' // 添加这行
}
之后再次编译即可。最终可以在以下路径可以得到APK应用。
D:\DeskTop\MNN\project\android\demo\app\build\outputs\apk\debug
最后通过解压这个apk应用为文件夹,然后在lib文件夹下面可以找到包含mnn的*so文件