首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android NDK使用不同的命名空间调用原生方法

Android NDK使用不同的命名空间调用原生方法
EN

Stack Overflow用户
提问于 2014-06-13 19:42:26
回答 1查看 1.8K关注 0票数 2

我是JNI编程的新手,我可以像从不同的JNI命名空间定义中一样调用本机方法吗?

例如:

代码语言:javascript
复制
package com.example.hellojni;
public class HelloJni extends Activity
{
  public native int MyMethod();  
  public native int OtherMethod();   // this works have the namespace package=jniexport interface

  static {System.loadLibrary("hello-jni");}

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    int b = OtherMethod(); //works
    int a = MyMethod(); //ERROR java.lang.reflect.InvocationTargetException 
 }
}

   ================File.c================
    JNIEXPORT int JNICALL Java_Cardioline_HelloJni_MyMethod(JNIEnv *env, jobject thisObj) 
  {
return 1;
  }
   JNIEXPORT int JNICALL Java_com_example_hellojni_HelloJni_OtherMethod(JNIEnv *env, jobject thisObj)
 {
 return 2;
  }
EN

回答 1

Stack Overflow用户

发布于 2014-06-15 13:14:40

不,JNI方法名是由javah预先定义的。试着从这里开始:

http://blog.edwards-research.com/2012/04/tutorial-android-jni/

javah将为您提供头部,您必须将方法声明复制到.c文件中。

如果您想调用另一个类中的JNI方法,请在java中调用另一个类。基本上改变这一点:

代码语言:javascript
复制
int a = MyMethod();

要这样做:

代码语言:javascript
复制
int a = new CardioLine.HelloJni().MyMethod();

通常,我有Java文件到.c/.cpp文件的一对一映射。这可能也是您想要的(对于具有本机方法的Java类)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24204497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档