Membangun OpenCV untuk Android dan menggunakannya dengan NDK

Konteks : Saat ini saya sedang mengembangkan aplikasi di Android Studio untuk kacamata augmented reality Moverio BT 200. Saya menggunakan OpenCV, dan khususnya, modul perpustakaan arUco. Modul ini harus digunakan dengan NDK. Selain itu, ini bukan rilis stabil, jadi saya mengkompilasi perpustakaannya sendiri (menggunakan panduan ini : https://zami0xzami.wordpress.com/2016/03/17/building-opencv-for-android-dari-source/). Pembangunan perpustakaan berjalan dengan baik. Setelah itu saya membuat proyek studio Android (customOCVtest). Saya melakukannya seperti yang selalu saya lakukan saat menggunakan OpenCV dengan Android Studio dan NDK, kecuali kali ini dengan custom build. Saya memeriksa apakah perpustakaan telah dimuat dengan benar:

private static final String OCVdevTAG = "OCVmainAct";

static {
    System.loadLibrary("native-lib");
    if(!OpenCVLoader.initDebug()) {
        Log.d(OCVdevTAG, "OpenCV not loaded");
    } else {
        Log.d(OCVdevTAG, "OpenCV loaded");
    }
}

Perpustakaan memang dimuat saat saya membangun.

Sekarang masalahnya: Ketika saya mencoba menggunakan modul arUco dalam kode asli saya (inilah lib.cpp asli saya):

#include <jni.h>
#include <string>
#include <opencv2/aruco.hpp>

extern "C" {
jstring
Java_com_jambonsama_customocvtest_MainActivity_stringFromJNI(
    JNIEnv *env,
    jobject /* this */) {
std::string hello = "Hello from C++";
cv::Ptr<cv::aruco::Dictionary> dict = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250);
cv::Mat marker;
cv::aruco::drawMarker(dict, 25, 200, marker, 1);
return env->NewStringUTF(hello.c_str());
}
}

sinkronisasi gradle berfungsi, tetapi saya tidak dapat membangun. Saya mendapatkan kesalahan berikut:

Error:FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:externalNativeBuildDebug'.
> Build command failed.
Error while executing 'C:\Users\JambonSama\AppData\Local\Android\Sdk\cmake\3.6.3155560\bin\cmake.exe' with arguments {--build C:\Users\JambonSama\AndroidStudioProjects\customOCVtest\app\.externalNativeBuild\cmake\debug\mips64 --target native-lib}
[1/1] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\debug\obj\mips64\libnative-lib.so
FAILED: cmd.exe /C "cd . && C:\Users\JambonSama\AppData\Local\Android\sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe  -target mips64el-none-linux-android -gcc-toolchain C:/Users/JambonSama/AppData/Local/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/windows-x86_64 --sysroot=C:/Users/JambonSama/AppData/Local/Android/sdk/ndk-bundle/platforms/android-21/arch-mips64 -fPIC -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -fno-exceptions -fno-rtti -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -fno-exceptions -fno-rtti  -O0 -fno-limit-debug-info -O0 -fno-limit-debug-info  -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libnative-lib.so -o ..\..\..\..\build\intermediates\cmake\debug\obj\mips64\libnative-lib.so CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o  C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/libs/armeabi-v7a/libopencv_core.a C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/libs/armeabi-v7a/libopencv_aruco.a -llog -lm "C:/Users/JambonSama/AppData/Local/Android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips64/libgnustl_static.a" && cd ."
C:/Users/JambonSama/AppData/Local/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/mips64el-linux-android/4.9.x/../../../../mips64el-linux-android/bin\ld: C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/libs/armeabi-v7a/libopencv_core.a(alloc.cpp.o): Relocations in generic ELF (EM: 40)
  C:/Users/JambonSama/AppData/Local/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/mips64el-linux-android/4.9.x/../../../../mips64el-linux-android/bin\ld: C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/libs/armeabi-v7a/libopencv_core.a(alloc.cpp.o): Relocations in generic ELF (EM: 40)
  C:/Users/JambonSama/AppData/Local/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/mips64el-linux-android/4.9.x/../../../../mips64el-linux-android/bin\ld: C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/libs/armeabi-v7a/libopencv_core.a(alloc.cpp.o): Relocations in generic ELF (EM: 40)
  C:/Users/JambonSama/AppData/Local/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/mips64el-linux-android/4.9.x/../../../../mips64el-linux-android/bin\ld: C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/libs/armeabi-v7a/libopencv_core.a(alloc.cpp.o): Relocations in generic ELF (EM: 40)
  C:/Users/JambonSama/AppData/Local/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/mips64el-linux-android/4.9.x/../../../../mips64el-linux-android/bin\ld: C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/libs/armeabi-v7a/libopencv_core.a(alloc.cpp.o): Relocations in generic ELF (EM: 40)
  C:/Users/JambonSama/AppData/Local/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/mips64el-linux-android/4.9.x/../../../../mips64el-linux-android/bin\ld: C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/libs/armeabi-v7a/libopencv_core.a(alloc.cpp.o): Relocations in generic ELF (EM: 40)
  C:/Users/JambonSama/AppData/Local/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/mips64el-linux-android/4.9.x/../../../../mips64el-linux-android/bin\ld: C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/libs/armeabi-v7a/libopencv_core.a(alloc.cpp.o): Relocations in generic ELF (EM: 40)
  C:/Users/JambonSama/AppData/Local/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/mips64el-linux-android/4.9.x/../../../../mips64el-linux-android/bin\ld: C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/libs/armeabi-v7a/libopencv_core.a(alloc.cpp.o): Relocations in generic ELF (EM: 40)
  C:/Users/JambonSama/AppData/Local/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/mips64el-linux-android/4.9.x/../../../../mips64el-linux-android/bin\ld: C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/libs/armeabi-v7a/libopencv_core.a(alloc.cpp.o): Relocations in generic ELF (EM: 40)
  C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/libs/armeabi-v7a/libopencv_core.a: error adding symbols: File in wrong format
  clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
  ninja: build stopped: subcommand failed.


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

Secara khusus, pesan kesalahan ini memberi tahu saya bahwa saya mencoba membangun dengan argumen berikut:

{--build C:\Users\JambonSama\AndroidStudioProjects\customOCVtest\app\.externalNativeBuild\cmake\debug\mips64 --target native-lib}

Argumen ini dibuat secara otomatis oleh AS, dan saya tidak dapat menemukan file yang meneruskannya. Saya yakin jika saya bisa menemukannya, saya bisa membuat lengan (yang saya inginkan), bukan mips. Masalahnya, saya tidak dapat menemukannya. (Dan saya bahkan tidak yakin itu memang yang saya cari. Saya hanya mencoba membuat proyek untuk kacamata saya.)

Berikut ini adalah CMakeLists.txt saya:

# Sets the minimum version of CMake required to build the native
# library. You should either keep the default value or only pass a
# value of 3.4.0 or lower.

cmake_minimum_required(VERSION 3.4.1)

# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds it for you.
# Gradle automatically packages shared libraries with your APK.

add_library( # Sets the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             # Associated headers in the same location as their source
             # file are automatically included.
             src/main/cpp/native-lib.cpp )

include_directories(C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/jni/include)

# Searches for a specified prebuilt library and stores the path as a
# variable. Because system libraries are included in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

find_library( # Sets the name of the path variable.
              log-lib

              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in the
# build script, prebuilt third-party libraries, or system libraries.


target_link_libraries( # Specifies the target library.
                       native-lib
                       C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/libs/armeabi-v7a/libopencv_core.a
                       C:/Libs/opencv_src/opencv/platforms/build_android_arm/install/sdk/native/libs/armeabi-v7a/libopencv_aruco.a

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )

ini build.gradle aplikasi saya:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.1"
    defaultConfig {
        applicationId "com.jambonsama.customocvtest"
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
    sourceSets { main { jni.srcDirs = ['src/main/jni', 'src/main/jniLibs/'] } }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.0.1'
    testCompile 'junit:junit:4.12'
    compile project(':openCVLibrary310dev')
}

dan build.gradle openCVLibrary310dev saya

apply plugin: 'com.android.library'

android {
    compileSdkVersion 25
    buildToolsVersion "23.0.2"

    defaultConfig {
        ndk {
            abiFilter("armeabi-v7a")
        }
        minSdkVersion 14
        targetSdkVersion 25
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

Apa yang saya coba, terutama dengan hanya menyalin hal-hal yang membantu orang lain memecahkan masalah yang tampaknya mirip dengan masalah saya:

#set(CMAKE_SYSTEM_NAME Android)

or

#set(CMAKE_TOOLCHAIN_FILE "Toolchain file" CACHE FILEPATH "C:/Libs/opencv_src/opencv/platforms/android.toolchain.cmake")

or

#set( CMAKE_CXX_COMPILER "C:/Libs/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++.exe" )

di CMakeLists.txt

Dan

splits {
    abi {
        enable true
        reset()
        include 'armeabi-v7a'
        universalApk true
    }
}

or

tasks.getByPath(":app:linkMipsDebugRemoteDesktopSharedLibrary").enabled = false

di build.gradle (saya mencoba keduanya karena saya tidak tahu yang mana yang seharusnya memilikinya).

Kecuali untuk bagian kode terakhir (task.getByPath...), sinkronisasi berhasil, tetapi saya tidak dapat membuatnya. Untuk yang terakhir, saya bahkan tidak bisa menyinkronkan.

Saya juga mencoba membangun kembali perpustakaan untuk mips, karena tampaknya arsitekturnya yang menjadi masalah, tetapi saya tidak tahu bagaimana melakukannya.

Di mana saya dapat menemukan file dengan argumen berikut:

{--build C:\Users\JambonSama\AndroidStudioProjects\customOCVtest\app\.externalNativeBuild\cmake\debug\mips64 --target native-lib}

dilewati saat membangun? Dan/atau bagaimana cara membuat Android Studio membangun proyek saya untuk arsitektur lengan?


person JambonSama    schedule 03.12.2016    source sumber


Jawaban (1)


Jadi masalah arsitektur mips dapat diselesaikan dengan menambahkan kode berikut ke gradle.build aplikasi, di akhir blok Android :

productFlavors {
    armv7 {
        ndk {
            abiFilter "armeabi-v7a"
        }
    }
    fat
}

Namun kemudian muncul masalah lain. Khususnya, perpustakaan ini dibangun dengan opsi karoten, yang tidak disukai Android Studio, dan kemudian, gzlib tidak ada, sehingga Android Studio tidak dapat membangun dan/atau menjalankan. Jadi setelah BANYAK percobaan, saya akhirnya mencapai apa yang saya inginkan: kompilasi silang openCV dengan modul tambahan untuk Android di Windows, dan membangun proyek AS dengan pustaka yang dibangun tersebut sehingga dapat berfungsi. Saya mendokumentasikan seluruh proses saya, mulai dari mengunduh sumber openCV hingga menjalankan aplikasi pada perangkat yang saya rancang sendiri, saya hanya akan menyalin dan menempelkannya di sini untuk siapa saja yang perlu melakukannya juga. Petunjuk berikut sebagian besar didasarkan pada tutorial ini (terima kasih kepada Zamrath Nizam yang menulisnya). Satu-satunya masalah dengan tutorial itu adalah mungkin sudah agak lama, jadi beberapa opsi/langkah perlu diubah.

CROSS COMPILE OPENCV DARI SUMBER DENGAN MODUL TAMBAHAN UNTUK ANDROID DARI WINDOWS10

* PERTAMA : prasyarat *

  • unduh OpenCV dan unzip (katakan di '../opencv-source')
  • unduh modul tambahan OpenCV dan unzip (katakan di '../opencv-contrib-source')
  • unduh Android NDK (ucapkan di '../ndk-dir')
  • unduh CMake (untuk mengatakan '../cmake-dir') dan MinGW (untuk mengatakan '../mingw-dir')
  • instal Android Studio

* KEDUA : konfigurasikan dengan CMake *

  • buka '../opencv-source/platforms' dan buat folder bernama 'build_android_arm'
  • in CMake, fill the following first two fields with the following paths :
    1. where is the source code : '../opencv-source'
    2. di mana membangun binari: '../opencv-source/platforms/build_android_arm'
  • add the following options via the 'Add Entry' :
    1. ANDROID_NDK, type 'path', value '../ndk-dir'
    2. ANDROID_NDK_HOST_X64, ketik 'bool', nilai 1
    3. CMAKE_TOOLCHAIN_FILE, ketik 'path', nilai '../opencv-source/platforms/android/android.toolchain.cmake'
  • tekan 'Konfigurasi'
  • pilih 'MinGW Makefiles' sebagai kompiler
  • pilih 'Tentukan file rantai alat untuk kompilasi silang'
  • press 'Next', and 'Finish'
    • note 1 : As long as you've got no error message, everything's good. Don't worry about the warning messages (like CMake telling you you're doing deprecated stuff).
    • note 2 : Jika pada langkah tersebut tidak dapat dikonfigurasi, coba baca beberapa poin berikutnya, mungkin bisa membantu.
  • ubah opsi tambahan berikut melalui kolom 'Search' :

    1. EXTRA_MODULE_PATH, type 'path', value '../opencv-contrib-source/modules'
    2. WITH_CAROTENE, ketik 'bool', nilai 0
    3. BUILD_ZLIB, type 'bool', value 1
      • note : You MUST have configured already once before this step, because the variables created before are regrouped under the group 'Ungrouped entries', while the following variables are CMake automatically generated variables, and NEED to be grouped in the right groups (which is NOT 'Ungrouped entries').
  • verifikasi bahwa opsi berikut telah diatur dengan benar (melalui bidang 'Pencarian'):

    1. ANDROID_NDK_HOST_X64, type 'bool', value 1
    2. CMAKE_MAKE_PROGRAM, ketik 'path', nilai '../mingw-dir/bin/mingw32-make.exe'. Opsi ini, sebenarnya saya TIDAK memilikinya di konfigurasi CMake saya. JIKA ketika Anda menekan 'Konfigurasi', itu tidak berfungsi DAN Anda tidak memiliki opsi ini, maka Anda harus mencoba menambahkannya (tapi saya tidak tahu caranya). JIKA saat Anda menekan 'Konfigurasi' Anda tidak mengalami masalah apa pun, jangan pedulikan variabel itu. Pemeriksaan ini berasal dari tutorial asli yang ditautkan di atas.
    3. CMAKE_TOOLCHAIN_FILE, ketik 'path', nilai '../opencv-source/platforms/android/android.toolchain.cmake'
  • tekan 'Konfigurasi'

  • pilih 'MinGW Makefiles' sebagai kompiler
  • pilih 'Tentukan file rantai alat untuk kompilasi silang'
  • tekan 'Selanjutnya', dan 'Selesai'
  • tekan 'Hasilkan'

* KETIGA : kompilasi dengan mingw *

  • buka '../mingw-dir/msys/1.0' dan jalankan file bash 'msys'
  • arahkan ke '../opencv-source/platforms/android_arm'
  • jalankan perintah 'mingw32-make'
  • jalankan perintah 'mingw32-make install'

* KEEMPAT : proyek android *

  • launch Android Studio and create a new project :
    1. select File -> New -> New Project...
    2. isi 'Nama aplikasi' dengan misalkan 'cOCV'
    3. centang kotak 'Sertakan Dukungan C++'
    4. klik 'Selanjutnya'
    5. pilih SDK min Anda (misalkan API 14: Android 4.0 (IceCreamSandwich)
    6. klik 'Berikutnya', 'Berikutnya' dan 'Selesai'
  • buka File -> Baru -> Impor Modul...

    1. provide '../opencv-source/platforms/android_arm/install/sdk/java'
    2. klik 'Selanjutnya' dan 'Selesai'
  • ubah target dalam file build.gradle di folder openCVLibraryXXX (modul yang diimpor):

    1. compileSdkVersion and targetSdkVersion should be the same, greater or equal to 23
    2. minSdkVersioon harus sama dengan yang ditentukan saat membuat proyek
  • dalam file build.gradle di folder openCVLibraryXXX (modul yang diimpor):

    1. replace 'apply plugin: com.android.application' as, 'apply plugin: com.android.library'
    2. remove the line 'applicationId "org.opencv"'
      • note : That last step is done in order to avoid following error : 'unspecified on project app resolves to an APK archive which is not supported as a compilation dependency'.
  • tambahkan perpustakaan yang diimpor sebagai ketergantungan ke modul 'aplikasi' di File->'Struktur Proyek'

  • buat folder jniLibs di 'app/src/main':

    1. right click 'app' in the Android view on the left menu
    2. klik 'Folder-Baru-Folder JNI'
    3. centang 'Ubah Lokasi Folder'
    4. atur 'Sumber Target Ditetapkan sebagai' app/src/main/jniLibs'
  • salin pustaka OpenCV dari 'opencv-source/platforms/android_arm/install/sdk/native/libs' ke folder yang baru dibuat (jniLibs) di dalam folder 'AndroidStudioProjects/cOCV/app/src/main/jniLibs'

    • note : For example, my AndroidStudioProjects folder is located at 'C:\Users\JambonSama\AndroidStudioProjects'.
  • di 'opencv-contrib-source/modules/module_you_desperately_need/CMakeLists.txt', ubah 'ocv_define_module(module_you_desperately_need opencv beberapa modul lain)' menjadi 'ocv_define_module(module_you_desperately_need opencv beberapa modul lain WRAP java)'

    • note 1 : THIS STEP MAY BE USELESS, because WRAP java is probably already written in the file.
    • note 2 : Kalau 'python' ditulis juga tidak apa-apa, biarkan saja ditulis di tempatnya.
  • di CMakeLists.txt, tambahkan :

    1. dua baris berikut setelah blok 'add_library' dan sebelum blok 'find_library' :

       include_directories(../opencv_src/opencv/platforms/build_android_armn/install/sdk/native/jni/include)
       link_directories(../AndroidStudioProjects/cOCVn/app/src/main/jniLibs/armeabi-v7a)
      
      • note : These two lines pretty straight-forwardly give the paths for the include and link directories
    2. baris berikut setelah blok 'find_library' dan sebelum blok 'target_link_libraries' :

       file(GLOB PARTYLIBS "../opencv_src/opencv/platforms/build_android_armn/install/sdk/native/3rdparty/libs/armeabi-v7a/*.a")
       file(GLOB CVLIBS  "../opencv_src/opencv/platforms/build_android_armn/install/sdk/native/libs/armeabi-v7a/*.a")
      
      • note : These are for easier linking commands, see next point.
    3. jalur berikut, SEPERTI TERTULIS, di 'target_link_libraries', setelah variabel 'native-lib', dan sebelum variabel '${log-lib}' :

       ${CVLIBS}
       ${PARTYLIBS}
       ${CVLIBS}
      
      • note : THAT IS THE TRICKY PART : because of cyclical dependencies, you have to write CVLIBS, PARTYLIBS, and then CVLIBS a second time, otherwise you won't stop having linking errors. By now, everything should be linked.
  • di gradle.build aplikasi, tambahkan kode berikut:

         productFlavors {
             armv7 {
                 ndk {
                     abiFilter "armeabi-v7a"
                 }
             }
             fat
        }
    

    di akhir blok Android

    • note : This prevents the mips64 architecture error at build, by specifying once and for all the arm architecture
  • di native-lib.cpp :

    1. coba kode berikut di fungsi 'stringFromJNI' (kode ini otomatis dihasilkan oleh AS saat proyek dibuat)

       cv::Mat test;
       cv::VideoCapture camera;
       camera.open(0);
       cv::Ptrcv::aruco::Dictionary dict = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250);
       cv::Mat marker;
       cv::aruco::drawMarker(dict, 25, 200, marker, 1);
       std::string hello = "Hello from C++";
       return env-NewStringUTF(hello.c_str());
      
    2. jangan lupa yang berikut ini antara lain :

       #include jni.h
       #include string
       #include opencv2/aruco.hpp
       #include opencv2/videoio.hpp
      
      • note : Because the string is not generated before the end of the function, you know, when you test, that if the string is indeed displayed on screen, the function has been gone through without problem, and that you're good (since the above provided code use some modules that are not on the stable realease as of 08/12/2016 (8th of december, I write dates with a dd/mm/yyyy format).
  • waktu untuk menguji:

    1. sync the gradle
    2. membangun
    3. dijalankan pada perangkat lengan

Anda siap berangkat \ o \\ O // o /

Catatan tambahan :

  • Semua file gradle.build dan file CMakeLists.txt dapat dengan mudah ditemukan di Android View pada menu di sebelah kiri jendela di AS.
  • Ingatlah jika Anda mengalami kesalahan saat menavigasi di jendela perintah, mungkin '/' Anda seharusnya '\' atau sebaliknya. (perintah 'cd' untuk menavigasi di jendela perintah).
  • Saya menjalankan di Windows10.
  • Jika Anda tidak begitu yakin apa yang harus Anda lihat di layar langkah demi langkah, tutorial yang saya sebutkan di awal jawaban akan memberi Anda gambaran bagus tentang apa yang seharusnya Anda lihat hingga pembuatan proyek AS. Kemudian, Anda dapat melihat tutorial ini, yang menjelaskan cara menyiapkan OpenCV SDK di proyek Android Studio UNTUK RILIS RESMI. Langkah-langkah yang saya berikan berbeda dari KEDUA tutorial tersebut, namun saya letakkan di sini, karena dapat membantu Anda mengetahui seperti apa tampilan layar/jendela Anda.
person JambonSama    schedule 08.12.2016
comment
Karena CMake adalah mekanisme pembangunan pilihan di Android Studio, apakah ada cara untuk melakukan ini semua dari dalam AS? Misalnya, jika seseorang memulai dengan build seperti yang ada di sini: stackoverflow.com/questions/38958876/ yang sedang melakukan kompilasi asli, dapatkah tambahan yang tidak bebas modul ditambahkan tanpa CMake terpisah dan MinGW terpisah? - person Dale; 19.05.2017
comment
Saya harus menggunakan ini CMAKE_TOOLCHAIN_FILE: NDK_HOME\build\cmake\android.toolchain.cmake - person Tomáš Zato - Reinstate Monica; 11.09.2020