package study.jnidemo;
import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.widget.Button;
import android.view.View;
import android.widget.TextView;
import android.content.Context;
import android.content.DialogInterface;
public class JniDemoActivity extends Activity {
public String strTest = " [initial message]";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findAndModifyButton();
}
public String getTestString()
{
return strTest;
}
// 测试JAVA的NDK调用
public native String stringFromJNI();
// 测试C/C++中对JAVA函数的静态回调
public native static int jniStaticShowMessage(Context ctx, String strTitle, String strMessage);
// 测试实例中C/C++中对JAVA类的函数的调用
public native int jniShowMessage(Context ctx, String strTitle, String strMessage);
// 测试创建新实例C/C++对JAVA类的函数的调用
public native int jniInstanceShowMessage(Context ctx, String strTitle, String strMessage);
static {
System.loadLibrary("demo-jni");
}
static int staticShowMessage(Context ctx, String strTitle, String strMessage)
{
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setTitle(strTitle);
builder.setMessage(strMessage);
builder.setPositiveButton("确定",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int whichButton){
}
});
builder.show();
return 0;
}
public int showMessage(Context ctx, String strTitle, String strMessage)
{
return staticShowMessage(ctx, strTitle, strMessage);
}
private void findAndModifyButton()
{
// 测试JAVA的NDK调用
Button btn01 = (Button)findViewById(R.id.Button01);
btn01.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
TextView tv = (TextView)findViewById(R.id.tv01);
tv.setText(stringFromJNI());
showMessage(JniDemoActivity.this, "JNI test1", stringFromJNI());
}
});
// 测试C/C++中对JAVA函数的静态回调
Button btn02 = (Button)findViewById(R.id.Button02);
btn02.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
int ret = jniStaticShowMessage(JniDemoActivity.this, "JNI test2",
"test static callback Message");
TextView tv = (TextView)findViewById(R.id.tv01);
if(ret == 0)
{
tv.setText("test JNI static callback successed");
}
else
{
tv.setText("test JNI static callback fialed");
}
}
});
// 测试实例中C/C++中对JAVA类的函数的调用
Button btn03 = (Button)findViewById(R.id.Button03);
btn03.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
strTest = " [message has changed now]";
int ret = jniShowMessage(JniDemoActivity.this, "JNI test3",
"test callback in current instance");
TextView tv = (TextView)findViewById(R.id.tv01);
if(ret == 0)
{
tv.setText("test JNI callback successed");
}
else
{
tv.setText("test JNI callback fialed");
}
}
});
// 测试创建新实例C/C++对JAVA类的函数的调用
Button btn04 = (Button)findViewById(R.id.Button04);
btn04.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
strTest = " [message has changed now]";
int ret = jniInstanceShowMessage(JniDemoActivity.this, "JNI test4",
"test callback in new instance");
TextView tv = (TextView)findViewById(R.id.tv01);
if(ret == 0)
{
tv.setText("test JNI new instance successed");
}
else
{
tv.setText("test JNI new instance fialed");
}
}
});
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
演示JNI中几种不同的调用方法 1. 在应用的JAVA代码中调用NDK中C/C++实现的函数。 2. 在NDK开发中的C/C++代码调用应用中JAVA类的静态函数。 3. 在NDK开发中的C/C++代码调用应用中JAVA类当前传入NDK中的实例的函数。 4. 在NDK开发中的C/C++代码调用应用中JAVA类新建实例的函数。
资源推荐
资源详情
资源评论
收起资源包目录
JniDemo.rar (37个子文件)
.project 1KB
.externalToolBuilders
JniBuilder.launch 864B
proguard.cfg 1KB
src
study
jnidemo
JniDemoActivity.java 4KB
AndroidManifest.xml 682B
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
drawable-mdpi
icon.png 3KB
layout
main.xml 1KB
values
strings.xml 173B
assets
jni
demo-jni.c 3KB
demo-jni.cpp 1KB
Android.mk 748B
gen
study
jnidemo
R.java 944B
libs
armeabi
libdemo-jni.so 11KB
default.properties 362B
obj
local
armeabi
libdemo-jni.so 56KB
objs
demo-jni
demo-jni.o.d 1KB
demo-jni.o 32KB
libmediainfo-jni.so 3.22MB
libstdc++.a 8B
.classpath 280B
bin
study
jnidemo
R$layout.class 379B
R$drawable.class 385B
R$attr.class 325B
JniDemoActivity$3.class 1KB
JniDemoActivity$2.class 1KB
JniDemoActivity$1.class 800B
JniDemoActivity.class 3KB
JniDemoActivity$4.class 1KB
R$id.class 495B
R.class 496B
R$string.class 412B
JniDemoActivity$5.class 1KB
resources.ap_ 11KB
classes.dex 6KB
JniDemo.apk 21KB
共 37 条
- 1
seniorwizard
- 粉丝: 1w+
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WordsVector (1).ipynb
- 20240429_112025.m4a
- 91fdd461elb59a4ce8dfcfc46bc283a7.msi
- Image_1715565894150.jpg
- 899433453404498北京市.zip
- Oracle Instant Client for Linux x86-64 (64-bit) Version 11.1.0.7
- dataExpr.tom-block.1.RData
- 实战验证过的最新远程Tomcat调试方式(基于IDEA2023/2024, JDK1.8, TOMCAT9, WIN10的)
- 200SMART与V20变频器RTU通讯.smart
- 天使插件4.019版-成品
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页