安卓JNI--JNI底层C回调Java方法
来源:互联网 发布:淘宝新店推广 编辑:程序博客网 时间:2024/05/01 00:57
Google官方JNI指导下载:http://download.csdn.net/detail/muyang_ren/9344131
XML布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.lianghuiyong.myapplication.MainActivity" android:orientation="vertical"> <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
Java文件代码
package com.example.lianghuiyong.myapplication;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.TextView;public class MainActivity extends AppCompatActivity { static { System.loadLibrary("test-jni"); } public native void test1(); public native void test2(); public String text2string = null; public TextView textView1 = null; public TextView textView2 = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView1 =(TextView) findViewById(R.id.text1); textView2 =(TextView) findViewById(R.id.text2); test1();//JNI回调settextview方法改变textView内容 test2();//JNI回调text2string变量改变text2string内容 textView2.setText(text2string); } public void settextview(String string){ textView1.setText(string); }}
JNI 常用类型对应
JNI 数组类型对应
JNI GetMethodID第四个参数参考
JNI文件
#include <jni.h>#include <stdio.h>#include <android/log.h>JNIEXPORT void JNICALLJava_com_example_lianghuiyong_myapplication_MainActivity_test1(JNIEnv *env, jobject instance) { // TODO //找到com.example.lianghuiyong.myapplication.MainActivity类在JNI层中对应的env实例 jclass mainactivity = (*env)->FindClass(env ,"com/example/lianghuiyong/myapplication/MainActivity"); //jmethodID:查找到类的方法的ID,取出MainActivity类中settextview方法, //第四个参数V为Java中settextview方法的返回类型,Ljava/lang/String;为参数类型 jmethodID textview1 = (*env)->GetMethodID(env,mainactivity,"settextview","(Ljava/lang/String;)V"); jstring hello = (*env)->NewStringUTF(env,"hello jni test1"); (*env)->CallVoidMethod(env,instance,textview1,hello);}JNIEXPORT void JNICALLJava_com_example_lianghuiyong_myapplication_MainActivity_test2(JNIEnv *env, jobject instance) { // TODO //test2刚开始的时候想查到Java的属性textView2后,调用textView2的setText()的方法,但是JNI是找不到这个方法。 //这里就用个简单的方法改变变量text2string的值,我们也可以在Java里建一个方法,使用handler bundle来实现。然后底层传参并回调这个方法。 //jclass:查找线程相关env的类 //找到com.example.lianghuiyong.myapplication.MainActivity类在JNI层中对应的env实例 jclass mainactivity = (*env)->FindClass(env ,"com/example/lianghuiyong/myapplication/MainActivity"); //jfieldID:查找到类的成员的ID jfieldID textview2 = (*env)->GetFieldID(env,mainactivity,"text2string","Ljava/lang/String;"); jstring hello = (*env)->NewStringUTF(env,"hello jni test2"); (*env)->SetObjectField(env,instance,textview2,hello);}
Android studio 配置JNI:http://blog.csdn.net/muyang_ren/article/details/50160241
0 0
- 安卓JNI--JNI底层C回调Java方法
- JNI中C回调java方法
- JNI中的C回调java中的方法
- 安卓JNI/NDK开发3(进阶 在C代码中调用java方法)
- jni回调java方法
- jni - c 调用java方法
- JNI实现java调用C语言实现底层代码
- 安卓开发——JNI——回调java中的方法
- 安卓驱动、HAL、JNI与java
- 安卓驱动、HAL、JNI与java
- 安卓开发 java调用jni
- AndroidJNI 安卓JNI
- 安卓JNI
- 安卓---JNI使用
- 安卓JNI入门
- 安卓JNI基础
- 安卓JNI提高
- 安卓jni进阶
- STL学习小结
- El表达式获取数据
- 2015,鬼王Xun和GGL比赛,带给我们无尽的欢乐
- Android控件之TimePicker、DatePicker
- Linux下MySQL安装
- 安卓JNI--JNI底层C回调Java方法
- 【第14周—查找项目1-3——验证二叉排序树相关算法】
- 青蛙跳台阶
- 第一章 Java环境
- 方向传感器的简单使用-模仿微信摇一摇
- 线/进程所持有资源以及子线/进程所继承资源
- STL学习小结2
- LibGDX_4.2: 演员(Actor)
- UI基础-图片异步下载、KVO