Android NDK - 在不同的标头中包含 c++ 标头

Android NDK - Include a c++ header in a different header?

本文关键字:包含 c++ 标头 NDK Android      更新时间:2023-10-16

我有一个依赖于Effect.h文件的Ability.h文件。

我需要使用 javah 来生成我的标头,但我无法在我的 Ability.java 类中定义 Effect 依赖项,我希望从中生成 c++ 标头。

例:

public class Ability {
  static {
    System.loadLibrary("com_test_Effect");
    System.loadLibrary("com_test_Ability");
  }
  public native Effect foo(Effect x);
}

此代码生成一个不带 foo() 函数的 *.h 文件,就好像它无法识别它一样。如果我将返回类型交换为 int 并且不包含com_test_Effect,它确实会生成一个正确的文件。

我确实在 Android.mk 文件中定义了两个模块(com_test_Effect 和 com_test_Ability(。

如何将另一个 c++ 文件直接包含在 javah 生成*.hXyz.java 类中?

编辑:这个问题也可以这样问:有没有办法传递C++类型的参数或从作为C++和Java之间的接口的函数返回C++类型的值?(接口介质是JNI。例如,您可以使用 int 等基本类型执行此操作,然后将其转换为 jint 等。

返回一个对象怎么样:

private native Object fooNative(Object x);

然后转换它,使其具有相同的签名:

public Effect foo(Effect x) {
    return (Effect)fooNative(x);
}