2015-05-29 11 views
5

Vì vậy, tôi muốn sửa đổi một trong các tệp trong bản dựng OpenCV cho Android và tôi làm theo hướng dẫn trên their site để tải xuống bản dựng và tôi có thể làm cho nó thành công. Tôi đã sửa đổi một trong các tập tin (calibinit.cpp) và làm cho nó một lần nữa và sao chép các tập tin trongCách sử dụng bản dựng OpenCV được biên dịch lại cho Android

opencv/nền tảng/build_android_arm/lib/

thư mục vào thư mục jniLibs của Dự án AndroidStudio của tôi .

Tuy nhiên, những thay đổi tôi đã thực hiện chắc chắn không hoạt động. Tôi đã có một thư viện OpenCV trước đó được liên kết với dự án của tôi, vì vậy tôi khá chắc chắn nó vẫn đang sử dụng mã cũ. Làm cách nào để sử dụng bản dựng mới với Dự án AndroidStudio của tôi?

Trả lời

0

Bạn có thể cung cấp thêm chi tiết về cách bạn sử dụng jni trong Dự án Android Studio không?

  1. Bạn có cố gắng làm sạch và xây dựng lại không?
  2. Bạn có Android.mk tùy chỉnh của riêng mình không? khiến Android Studio sẽ tạo Android.mk của riêng mình, điều này có thể dẫn đến kết quả không mong muốn như bạn nghĩ.
+0

Vâng, tôi đã làm sạch và xây dựng lại. Tôi không có tệp Android.mk. Tôi làm theo hướng dẫn [ở đây] (http://code.opencv.org/projects/opencv/wiki/Building_OpenCV4Android_from_trunk) và vì một số lý do các tệp java không biên dịch. – petranaya

0
  1. xóa thư mục jniLibs và mọi tệp như vậy, bạn không cần chúng.
  2. xác định con đường NDK trong local.properties file:
    sdk.dir = D: \ Android \ SDK
    ndk.dir = D: \ Android \ NDK
  3. tạo một thư mục (i đặt tên nó là JNI) và đặt Android. mk và Application.mk trong đó (và tệp dummy.c trống để ngăn lỗi lỗi trong tương lai)
  4. như Roy đã nói, Android Studio tạo Android.mk riêng, chúng tôi có tệp Android.mk và Android Studio của riêng mình phải sử dụng nó. jni.srcDirs = [] ngăn chặn thế hệ đó!
  5. nguồn Extract OpenCV nơi nào đó, tôi đặt chúng ở đây: D:\Android\Libs\OpenCV
  6. đây là tác phẩm của tôi, sửa đổi và sử dụng chúng

build.gradle:

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 22 
buildToolsVersion "22.0.1" 

defaultConfig { 
    applicationId "your.package" 
    minSdkVersion 11 
    targetSdkVersion 22 
    versionCode 1 
    versionName "1.0" 
} 

sourceSets { 
    main { 
     jni.srcDirs = [] /*disables automatic ndk-build call */ 
    } 
} 

task ndkBuild(type: Exec) { 
    commandLine file('D:\\Android\\NDK\\ndk-build.cmd').absoluteFile, 
      'NDK_PROJECT_PATH='+file('src\\main\\jni').absolutePath, 
      'APP_BUILD_SCRIPT='+file('src\\main\\jni\\Android.mk').absolutePath, 
      'NDK_APPLICATION_MK='+file('src\\main\\jni\\Application.mk').absolutePath, 
      'NDK_LIBS_OUT='+file('src\\main\\jniLibs').absolutePath 
} 

    tasks.withType(JavaCompile) { 
     compileTask -> compileTask.dependsOn ndkBuild 
    } 


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



dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:22.1.1' 
    compile project(':openCVLibrary300rc1') 
} 

Application .mk:

APP_STL := gnustl_static 
APP_CPPFLAGS := -frtti -fexceptions 
APP_ABI := armeabi-v7a x86 
APP_PLATFORM := android-8 

Android.mk:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

#opencv 
OPENCVROOT:= D:/Android/Libs/OpenCV 
OPENCV_CAMERA_MODULES:=on 
OPENCV_INSTALL_MODULES:=on 
OPENCV_LIB_TYPE:=SHARED 
include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk 

//I have a local source file, you can remove it 
LOCAL_SRC_FILES := DetectionBasedTracker_jni.cpp 

LOCAL_C_INCLUDES += $(LOCAL_PATH) 
LOCAL_LDLIBS += -llog 
LOCAL_MODULE := detection_based_tracker 
include $(BUILD_SHARED_LIBRARY) 
Các vấn đề liên quan