JNI总和2维数组 [英] JNI sum 2 dimentional array
本文介绍了JNI总和2维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
想与NDK的工作,我不得不与Android工作室没有运气(到现在为止我没有得到指示,因为我做的一切在终端IDE之外,没有code完成NDK路径点),我切换到日食,这使得它更容易使用JNI和NDK开发工作。
首先,我创建了一个项目,总结整数在C二维数组和金额恢复到Java端。我无法得到它的工作。你能帮忙吗?!
用C我的code是:
的#include< jni.h>
JNIEXPORT jint JNICALL Java_com_example_jninew_MainActivity_getNum(JNIEnv的* ENV,jobject OBJ,jintArray ARR)
{
INT I,J,总和= 0;
jsize宽度=(* ENV) - GT; GetArrayLength(ENV,ARR);
jintArray *行=(* ENV) - GT; GetIntArrayElements(ENV,编曲,0);
对于(i = 0; I<宽度;我++){ jint * POS =(* ENV) - GT; GetIntArrayElements(ENV,行了,我);
为(J = 0; J<高度; J ++){
总和+ = POS [I] [J]。
}
}
(* ENV) - GT; ReleaseIntArrayElements(ENV,编曲,线,0);
返回总和;
}
我的Java code是:
包com.example.jninew;进口android.app.Activity;
进口android.os.Bundle;
进口android.view.Menu;
进口android.view.MenuItem;
进口android.widget.TextView;公共类MainActivity延伸活动{ @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
TextView中的TextView =(的TextView)findViewById(R.id.tv);
INT [] []α= {{1,2},{3,4}};
textView.setText(之和为:+ getNum(一));
}
静态的{
的System.loadLibrary(getNum);
}
天然INT getNum(中间体[] []一个);
。
。
}
解决方案
我想应该是这样的:
的#include< jni.h>
JNIEXPORT jint JNICALL Java_com_example_jninew_MainActivity_getNum(JNIEnv的* ENV,jobject OBJ,jintArray ARR)
{
INT I,J,总和= 0;
jsize宽度=(* ENV) - GT; GetArrayLength(ENV,ARR); 对于(i = 0; I<宽度;我++){ jintArray *行=(* ENV) - GT; GetObjectArrayElement(ENV,编曲,我);
INT高度=(* ENV) - GT; GetArrayLength(ENV,线);
jint * POS =(* ENV) - GT; GetIntArrayElements(环境,线路,0); 为(J = 0; J<高度; J ++){
总和+ = POS [J]。
}
(* ENV) - GT; ReleaseIntArrayElements(ENV,编曲,POS,0);
(* ENV) - GT; ReleaseIntArrayElements(ENV,编曲,线,0);
}
返回总和;
}
wanting to work with NDK, I had no luck with android studio(till now I don't get the point of indicating the NDK path since I do everything in terminal outside of IDE and no code completion), I switched to eclipse which makes it more easier to work with jni and ndk dev.
To begin, I created a project to sum a 2d array of integer in c and return the sum to java side. I can't get it to work. can you help?!!
my code in C is:
#include <jni.h>
JNIEXPORT jint JNICALL Java_com_example_jninew_MainActivity_getNum(JNIEnv *env, jobject obj, jintArray arr)
{
int i,j, sum = 0;
jsize width = (*env)->GetArrayLength(env, arr);
jintArray *line = (*env)->GetIntArrayElements(env, arr, 0);
for (i=0; i<width; i++){
jint *pos = (*env)->GetIntArrayElements(env, line, i);
for (j=0; j<height; j++){
sum += pos[i][j];
}
}
(*env)->ReleaseIntArrayElements(env, arr, line, 0);
return sum;
}
My java Code is:
package com.example.jninew;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.tv);
int[][] a = {{1,2},{3,4}};
textView.setText("sum is: "+getNum(a));
}
static{
System.loadLibrary("getNum");
}
native int getNum(int[][] a);
.
.
.}
解决方案
i think it should be like this:
#include <jni.h>
JNIEXPORT jint JNICALL Java_com_example_jninew_MainActivity_getNum(JNIEnv *env, jobject obj, jintArray arr)
{
int i,j, sum = 0;
jsize width = (*env)->GetArrayLength(env, arr);
for (i=0; i<width; i++){
jintArray *line = (*env)->GetObjectArrayElement(env, arr, i);
int height = (*env)->GetArrayLength(env, line);
jint *pos = (*env)->GetIntArrayElements(env, line, 0);
for (j=0; j<height; j++){
sum += pos[j];
}
(*env)->ReleaseIntArrayElements(env, arr, pos, 0);
(*env)->ReleaseIntArrayElements(env, arr, line, 0);
}
return sum;
}
这篇关于JNI总和2维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文