繁体   English   中英

Android 应用程序在加载外部库时退出

[英]Android app exit while loading external library

我正在尝试将opencv4添加到我的 android 应用程序中,并按照这篇文章中的所有内容进行操作。

我在下面的 kotlin 文件的开头添加了System.loadLibrary

class MainActivity : AppCompatActivity() {
    companion object {
        init {
            System.loadLibrary("opencv_java4")
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) { }

但是应用程序在使用以下启动后退出:

09/22 16:08:04: Launching 'app' on Pixel 3a API 29.
$ adb shell am start -n "hasan.tts_mobile/hasan.tts_mobile.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Waiting for process to come online...
Timed out waiting for process to appear on Pixel_3a_API_29 [emulator-5554].

由于这个答案,看起来opencv 4中发生了一些变化,因此所有现有的教程都在讨论将java文件夹作为模块导入,而实际上需要导入的是skd文件夹本身。

您可以使用作为 OpenCV包装器的 JavaCV,或者手动执行 OpenCV,如下所示:

1- 从这里下载OpenCV – 4.1.1

2-解压文件夹,它将被解压到OpenCV-android-sdk ,其中包含以下内容:

Hasans-Air:OpenCV-android-sdk hasan$ ls
LICENSE     README.android  samples     sdk

3-前往 Android Studio 的项目

4-文件->新建->导入模块

5- Select 第2点解压文件夹中的sdk文件夹,如图所示建议的module name:sdk ,但是你可以重命名它像:sdkOpenCV4前面的一样:

在此处输入图像描述

6- Right click the app , select Open Module Settings , select Dependencies, then click the app module, in the Declared Dependencies tap click + then you'll see the OpenCV module there, click add it, click Apply then Add :

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

7- From OpenCV SDK copy the sdk/native/libs folder, and go to tour application folder src/main and paste it inside it, then rename the libs folder to jnilibs , so that in your application src/main folder you'll be有:

在此处输入图像描述

8- 在OnCreate中,您可以在开始使用之前添加检查:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        val ocvLoaded = OpenCVLoader.initDebug()
        if (ocvLoaded) {
            Toast.makeText(
                this@MainActivity, "OpenCV loaded",
                Toast.LENGTH_SHORT
            ).show()
        } else {
            Toast.makeText(
                this@MainActivity, "Unable to load OpenCV",
                Toast.LENGTH_SHORT
            ).show()
            Log.d("openCV", "loader: ${OpenCVLoader.initDebug()}")
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM