安卓开发——JNI——回调java中的方法
来源:互联网 发布:淘宝金丝绒太极服 编辑:程序博客网 时间:2024/05/22 07:57
JNI开发中
在C代码中回调java中的方法
package com.example.jnitest2;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.View;public class HomeActivity extends Activity {private NativeProviefder nativeProviefder;static{System.loadLibrary("jnitest2");}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_home);nativeProviefder = new NativeProviefder(this);}//点击调用一个空参数的方法 public void showStringOnclick(View view ){nativeProviefder.showStringNative();//showStringNative();}//点击调用一个相加的方法public void addNumber(View view ){nativeProviefder.addNative();//add();}//点击调用一个打出字符串的方法 public void printString(View view ){nativeProviefder.printStringNative();}//点击调用一个打出字符串的方法 public void printStaticString(View view ){nativeProviefder.printStringStaticNative();}}
package com.example.jnitest2;import android.content.Context;import android.widget.Toast;public class NativeProviefder {static{System.loadLibrary("jnitest2");}Context context;public NativeProviefder(Context context) {this.context = context;}public NativeProviefder() {super();}public void showString(){String string = "这是一个空的构造C来调用来显示 ";System.out.println(string);Toast.makeText(context, "这是空的==="+string, 0).show();}public void adds(int a,int b){String string = "这是这是用来计算加法运算的方法 ,计算结果 是 : ";int sum = a+b;System.out.println(string+sum);Toast.makeText(context, "这是空的==="+sum, 0).show();}public void printStrings(String string ){String strings = "这是一个输出打印一个字条 串的 方法 输出 的字符串 为 : ";System.out.println(strings);Toast.makeText(context, "printString==="+strings +"::"+string, 0).show();}public static void printStaticStrings(){String strings = "printStaticStrings: ";System.out.println(strings);}public native void showStringNative();public native void addNative();public native void printStringNative();public native void printStringStaticNative() ;}
#include <jni.h>#include <stdio.h>#include <stdlib.h>//回调空参数的方法JNIEXPORT void JNICALL Java_com_example_jnitest2_NativeProviefder_showStringNative(JNIEnv * env , jobject obj){// (*FindClass)(JNIEnv*, const char*);jclass claxx = (*env)->FindClass(env,"com/example/jnitest2/NativeProviefder");//jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);jmethodID method = (*env)->GetMethodID(env,claxx,"showString","()V");(*env)->CallVoidMethod(env,obj,method);}//回调带int参数的数组JNIEXPORT void JNICALL Java_com_example_jnitest2_NativeProviefder_addNative(JNIEnv * env , jobject obj){jclass claxx = (*env)->FindClass(env,"com/example/jnitest2/NativeProviefder");jmethodID method = (*env)->GetMethodID(env,claxx,"adds","(II)V");(*env)->CallVoidMethod(env,obj,method,1,2);}//回调带String参数的方法JNIEXPORT void JNICALL Java_com_example_jnitest2_NativeProviefder_printStringNative(JNIEnv * env , jobject obj){//加载类的字节码jclass claxx = (*env)->FindClass(env,"com/example/jnitest2/NativeProviefder");jmethodID method= (*env)->GetMethodID(env,claxx,"printStrings","(Ljava/lang/String;)V");jstring charst = (*env)->NewStringUTF(env,"yhtjhfhy");(*env)->CallVoidMethod(env,obj,method,charst);}//回调静态方法JNIEXPORT void JNICALL Java_com_example_jnitest2_NativeProviefder_printStringStaticNative(JNIEnv * env , jobject obj){//加载类的字节码jclass claxx = (*env)->FindClass(env,"com/example/jnitest2/NativeProviefder");jmethodID method= (*env)->GetStaticMethodID(env,claxx,"printStaticStrings","()V");(*env)->CallVoidMethod(env,obj,method);}//调用其他类的方法//JNIEXPORT void JNICALL Java_com_example_jnitest2_NativeProviefder_printStringStaticNativess//(JNIEnv * env , jobject obj){////加载类的字节码//jclass claxx = (*env)->FindClass(env,"com/example/jnitest2/NativeProviefder");//jmethodID method= (*env)->GetStaticMethodID(env,claxx,"printStaticStrings","()V");////jobject (*AllocObject)(JNIEnv*, jclass);//jobject mainobi = (*env)->AllocObject(env,"全类名");//(*env)->CallVoidMethod(env,mainobi,method);//}
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := jnitest2LOCAL_SRC_FILES := jnitest2.cinclude $(BUILD_SHARED_LIBRARY)
页面配制文件
<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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".HomeActivity" > <Button android:onClick="showStringOnclick" android:id="@+id/bt_showstring" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="C中回调一个空的参数" /> <Button android:onClick="addNumber" android:id="@+id/bt_addnumber" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="C中回调相加的方法" /> <Button android:onClick="printString" android:id="@+id/bt_printstring" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="C中回调打印字符串" /> <Button android:onClick="printStaticString" android:id="@+id/bt_printstaticstring" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="C中回调打印静态方法 字符串" /></LinearLayout>
0 0
- 安卓开发——JNI——回调java中的方法
- 安卓JNI--JNI底层C回调Java方法
- HAL/JNI简明笔记(五)——JNI访问java中的属性和方法
- 安卓开发 java调用jni
- 安卓 jni 开发 —— Android Studio 打包 so 的坑
- 安卓 jni 开发 —— Android Studio 打包 so 的坑
- 安卓 jni 开发 —— Android Studio 打包 so 的坑
- 安卓JNI/NDK开发3(进阶 在C代码中调用java方法)
- 安卓开发——Java 数组与List之间的转换方法
- eclipse中的Jni开发流程(二)——JNI简便的开发流程
- JNI中的C回调java中的方法
- JNI官方规范中文版——如何访问Java中的字段和方法
- JNI官方规范中文版——如何访问Java中的字段和方法
- JNI官方规范中文版——如何访问Java中的字段和方法
- 安卓开发——修改EditText中的光标位置
- 安卓开发中的数据库技术——SQLite
- 安卓 jni 开发之 native 方法的动态注册
- JNI/NDK开发指南(二)——JVM查找java native方法的规则
- JavaMail
- hdu1852
- Mac OS X中启动MySQL报错:ERROR! The server quit without updating PID file
- Centos6.5制作本地yum源
- JQuery ajax请求一直返回Error(parsererror)
- 安卓开发——JNI——回调java中的方法
- 抽象类和接口的区别
- C/C++语言内存对齐
- 在做自动化测试之前你需要知道的
- serialize a list of string and deserialize it
- leetcode #14 LongestCommenPrefix
- groovy 把json串转化成对象
- find maximized count of 0 on left and 1 on right in binary array
- Java线程中的ThreadPoolExecutor