[关闭]
@cxm-2016 2016-11-21T12:11:41.000000Z 字数 1383 阅读 3327

OpenGL-ES 3.0学习指南(二)——Hello Java

OpenGL-ES

版本:1
作者:陈小默
声明:禁止商业,禁止转载

发布于作业部落简书


上一篇:OpenGL-ES 3.0学习指南(一)——Hello NDK



四、JNI回调Java方法

第三章我们介绍了Java如何调用JNI的方法,本章我们就来学习如何在JNI中回调Java的方法。这里我们仍按照第三章的思路进行编写。本章内容是编写一个Activity,其中有一个TextView,当对TextView进行点击的时候,由JNI记录点击次数,并将结果显示在TextView上。

4.1 创建native方法

在这里我们将native方法与Activity写在一个类中

  1. public class HelloJavaActivity extends AppCompatActivity {
  2. private TextView tv;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_jni_callback);
  7. tv = (TextView) findViewById(R.id.tv_jni_callback);
  8. tv.setOnClickListener(new View.OnClickListener() {
  9. @Override
  10. public void onClick(View v) {
  11. callback();
  12. }
  13. });
  14. }
  15. public void setText(int count) {
  16. tv.setText("" + count);
  17. }
  18. public native void callback();
  19. }

4.2 创建源文件

接下来创建源文件hello-java.cpp,以下代码中所有函数在JNI完全指南系列均有详解。

  1. #include <jni.h>
  2. static int count;
  3. extern "C"
  4. JNIEXPORT void JNICALL
  5. Java_com_github_cccxm_ndk_view_HelloJavaActivity_callback(JNIEnv *env,
  6. jobject activity) {
  7. jclass activityClass = env->GetObjectClass(activity);
  8. jmethodID method = env->GetMethodID(activityClass, "setText", "(I)V");
  9. env->CallVoidMethod(activity, method, count += 1);
  10. }

4.3 修改CMakeList.txt文件

  1. add_library(ndk-lib SHARED
  2. src/main/cpp/hello-jni.cpp
  3. src/main/cpp/hello-java.cpp)

4.4 小结

通过本章的过程,我们能够实现一个点击计数器的效果。在JNI中操作Java对象的方式跟Java中的反射过程类似。


下一篇:OpenGL-ES 3.0学习指南(三)——JNI操作Bitmap

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注