java 生成jni_java-如何使用JNI创建对象?

本文探讨了如何使用JNI和NDK在Android应用中整合C代码。作者分享了一段具体的C代码示例,旨在通过NDKTest类实现图像引用功能,并讨论了在实现过程中遇到的问题。
AI助手已提取文章相关产品:

我需要使用NDK以及JNI将一些功能实现到Android应用程序中。

这是我编写的C代码:

#include

#include

jobject

Java_com_example_ndktest_NDKTest_ImageRef(JNIEnv* env, jobject obj, jint width, jint height, jbyteArray myArray)

{

jint i;

jobject object;

jmethodID constructor;

jobject cls;

cls = (*env)->FindClass(env, "com/example/ndktest/NDKTest/Point");

//what should put as the second parameter? Is my try correct, according to what

//you can find in .java file? I used this documentation: http://download.oracle.com/javase/6/docs/technotes/guides/jni/spec/functions.html#wp16027

constructor = (*env)->GetMethodID(env, cls, "", "void(V)");

//http://download.oracle.com/javase/6/docs/technotes/guides/jni/spec/functions.html#wp16660

//Again, is the last parameter ok?

object = (*env)->NewObject(env, cls, constructor, 5, 6);

//I want to assign "5" and "6" to point.x and point.y respectively.

return object;

}

我的问题或多或少在代码内得到了解释。 也许还可以:函数(jobject)的返回类型可以吗?

现在,NDKTest.java:

package com.example.ndktest;

import android.app.Activity;

import android.widget.TextView;

import android.os.Bundle;

public class NDKTest extends Activity {

/** Called when the activity is first created. */

public native Point ImageRef(int width, int height, byte[] myArray);

public class Point

{

Point(int myx, int myy)

{

x = myx;

y = myy;

}

int x;

int y;

}

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

TextView tv = new TextView(this);

byte[] anArray = new byte[3];

for (byte i = 0; i < 3; i++)

anArray[i] = i;

Point point = ImageRef(2, 3, anArray);

tv.setText(String.valueOf(point.x));

setContentView(tv);

}

static

{

System.loadLibrary("test");

}

}

当我尝试运行代码时,它不起作用。

您可能感兴趣的与本文相关内容

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值