Выход из приложения Android при загрузке внешней библиотеки - PullRequest
2 голосов
/ 22 сентября 2019

Я пытаюсь добавить opencv4 в мое приложение для Android, и сделал все как в этом сообщении.

Я добавил System.loadLibrary в начало моего файла kotlin sниже:

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].

1 Ответ

0 голосов
/ 22 сентября 2019

Благодаря этому ответу похоже, что в opencv 4 что-то изменилось, так что все существующие учебные пособия говорят об импорте папки java как модуля, в то время как фактически требуется импортировать skd сама папка.

Вы можете использовать JavaCV , который является оболочкой OpenCV, или сделать OpenCV вручную, как показано ниже:

1- С здесь скачать OpenCV – 4.1.1 для Android

2 - Извлеките папку, она будет распакована в OpenCV-android-sdk, которая содержит следующее:

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

3 - Отправляйтесь в свой проект на AndroidStudio

4- Файл -> Новый -> Модуль импорта

5- Выберите папку sdk в извлеченной папке в точке 2, как показано, предлагаемый module name равен :sdkно вы можете переименовать его как :sdkOpenCV4, не забывайте : перед именем

enter image description here

6 - Щелкните правой кнопкой мыши app, выберите Open Module Settings, выберите Зависимости, затем щелкните модуль app, нажмите Declared Dependencies, нажмите +, и вы увидите OpenCV модуль там, нажмите добавить его, нажмите Apply, затем Add:

enter image description here

enter image description here

enter image description here

enter image description here

7- Из OpenCV SDK скопируйте папку sdk/native/libs и перейдите кпросмотрите папку приложения src/main и вставьте ее в нее, затем переименуйте папку libs в jnilibs, чтобы в папке вашего приложения src/main было:

enter image description here

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()}")
        }
    }
}
...