Android Studio NDK:二、JNI 返回JAVA 实体

本篇是承接!Android Studio NDK基础入门(基于gradle-experimental插件)的基础上进行的 #####1.编写Books实体类 /** * @author jayqiu * @describe * @date 2017/3/30 17:21 / public class Books { private String title; private String author; private String subject; private int book_id; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public int getBook_id() { return book_id; } public void setBook_id(int book_id) { this.book_id = book_id; } } #####2.编写MyNdk.java /* * @author jayqiu * @describe * @date 2017/3/30 13:52 */ public class MyNdk { static { System.loadLibrary("MyNdk"); } public native int getAdd(int a,int b); public native Books getBooks(Books books); }

#####3.MyNdk.c生成Java_com_threehalf_mynewjni_MyNdk_getBooks 方法 JNIEXPORT jobject JNICALL Java_com_threehalf_mynewjni_MyNdk_getBooks(JNIEnv *env, jobject instance, jobject books) { jclass objectClass = (*env)->FindClass(env, "com/threehalf/mynewjni/Books");// java 实体类对应的位置 jfieldID title = (*env)->GetFieldID(env,objectClass, "title", "Ljava/lang/String;");//book title jfieldID book_id =(*env)->GetFieldID(env,objectClass, "book_id", "I");//book id

    (*env)->SetObjectField(env,books, title, (*env)->NewStringUTF(env,"C 语言"));//设置booktitle
    (*env)->SetIntField(env,books, book_id, 10);// 设置 book id
    return  books;
}
复制代码

#####4.MainActivity public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView = (TextView) findViewById(R.id.tv_name);

        // textView.setText(new MyNdk().getAdd(10,20)+"");
        Books books = new Books();
        books = (Books) new MyNdk().getBooks(books);
        textView.setText("ID:"+books.getBook_id() + "书名:" + books.getTitle());
    }
}
复制代码

#####5.运行结果

#####6.GetFieldID Java基础类型对应的符号

Java类型符号
booleanZ
byteB
charC
shortS
intI
longL
floatF
doubleD
voidV
objects对象Lfully-qualified-class-name; L类名;
Arrays数组[array-type [数组类型
methods方法(argument-types)return-type(参数类型)返回类型

Android Studio NDK:三、打包SO DOME 下载 Star 我的GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值