问题从java传递到c ++ jni android arm64-v8a 32/64位

时间:2016-01-04 18:03:53

标签: java android c++ android-ndk java-native-interface

嘿伙计们,我有一个将nativeobjectaddres从java传递到c ++的问题

这是我的java代码,findboardimage是一个c ++方法

Mat original = new Mat(), processed = new Mat(), res = new Mat();

Utils.bitmapToMat(bitmap[0], original);
if(original.channels()>4){
    return null;
}
Logger.d("before native imagetype "+ original.type()+" imagedepth "+original.depth()+" imagechannels "+original.channels());
Logger.d("before address "+original.getNativeObjAddr() );
return findBoardInImage(original.getNativeObjAddr());

c ++方法

JNIEXPORT void JNICALL Java_be_appwise_i3snap_1android_helpers_I3ImageProcessor_extractForeground(JNIEnv *env,jlong res) {
    cv::Mat *resMat = (cv::Mat *) res;
    __android_log_print(ANDROID_LOG_ERROR,"extractforeground ","voor eigen functie col %d  rows %d");
    *resMat=ImageProcessor::extractForeground(*resMat);
    __android_log_print(ANDROID_LOG_ERROR,"extractforeground","na eigen functie col %d  rows %d");
}

工作: 32位armeabi-v7a oneplus x,一加一,三星galaxy s4,sony experia m2和老三星平板电脑

不工作: arm64-V8A huawei,samsung s6,nexus 6p

这个mat有随机数的类型和随机数的通道让我相信long是32位但被解释为64位所以getchannel和gettype函数比它们应该大得多

1 个答案:

答案 0 :(得分:1)

我自己解决了这个问题 我确实注意到一些性能问题。 64位设备比32位设备慢得多。

$routeProvider.
      when('/wall', {controller:DashboardCtrl, templateUrl:'/chutirghonta_repo/contentpanel/views/dashboard.html'}).
      when('/books', {controller:BooksCtrl, templateUrl:'/chutirghonta_repo/contentpanel/views/books.html'}).
      when('/tests', {controller:TestsCtrl, templateUrl:'/chutirghonta_repo/contentpanel/views/tests.html'}).
      when('/createbook', {controller:CreateBookCtrl, templateUrl:'/chutirghonta_repo/contentpanel/views/bookcreation.html'}).
      when('/createbookpage', {controller:CreateBookPageCtrl, templateUrl:'/chutirghonta_repo/contentpanel/views/bookpagecreation.html'}).
      otherwise({redirectTo:'/wall'});
      ;

当您在gradle中导入库并且它包含64位版本时,它将忽略其他库的所有32位版本,这就是为什么我的java为32位且我的c ++试图将其理解为64位

同时检查此链接 Use Vuforia and io.realm db crash the app