Estou tentando usar o Android NDK.
Existe uma maneira de retornar uma matriz (no meu caso, uma int[]
) criada em JNI para Java? Nesse caso, forneça um exemplo rápido da função JNI que faria isso.
-Obrigado
fonte
Estou tentando usar o Android NDK.
Existe uma maneira de retornar uma matriz (no meu caso, uma int[]
) criada em JNI para Java? Nesse caso, forneça um exemplo rápido da função JNI que faria isso.
-Obrigado
Se você examinou a documentação e ainda tem perguntas que devem fazer parte da sua pergunta inicial. Nesse caso, a função JNI no exemplo cria um número de matrizes. A matriz externa é composta por uma matriz 'Object' criada com a função JNI NewObjectArray()
. Da perspectiva da JNI, isso é tudo uma matriz bidimensional, uma matriz de objetos que contém várias outras matrizes internas.
O loop for a seguir cria as matrizes internas que são do tipo int [] usando a função JNI NewIntArray()
. Se você apenas deseja retornar uma matriz unidimensional de entradas, a NewIntArray()
função é o que você usaria para criar o valor de retorno. Se você quisesse criar uma matriz unidimensional de Strings, usaria a NewObjectArray()
função, mas com um parâmetro diferente para a classe.
Como você deseja retornar uma matriz int, seu código será algo parecido com isto:
JNIEXPORT jintArray JNICALL Java_ArrayTest_initIntArray(JNIEnv *env, jclass cls, int size)
{
jintArray result;
result = (*env)->NewIntArray(env, size);
if (result == NULL) {
return NULL; /* out of memory error thrown */
}
int i;
// fill a temp structure to use to populate the java int array
jint fill[size];
for (i = 0; i < size; i++) {
fill[i] = 0; // put whatever logic you want to populate the values here.
}
// move from the temp structure to the java structure
(*env)->SetIntArrayRegion(env, result, 0, size, fill);
return result;
}
se alguém quiser saber como retornar a matriz String []:
código java
exportação nativa
Código nativo
from link: http://www.coderanch.com/t/326467/java/java/Returning-String-array-program-Java
fonte
Com base na pergunta, isso já está explicado na primeira resposta: como podemos passar int [] via jobjectArray. Mas aqui está um exemplo de como podemos retornar um jobjectArray que contém listas de dados. Isso pode ser útil para situações, por exemplo: quando alguém precisa retornar dados no formato 2D para desenhar alguma linha com os pontos x e y. O exemplo abaixo mostra como um jobjectArray pode retornar dados na forma do seguinte formato:
Entrada Java para o JNI:
Matriz [
Arraylist
de x pontos flutuantes] [Arraylist
de y pontos flutuantes]Saída JNI para java:
jobjectArray
[Arraylist
de x pontos flutuantes] [Arraylist
de y pontos flutuantes]fonte
A solução simples é escrever os dados da matriz em um arquivo de C e acessar o arquivo de Java
fonte