Android中Java和NDK(JNI)之间的共享静态var访问

时间:2015-12-04 20:34:35

标签: java android c++ android-ndk

我在我的应用程序中出于数学原因使用了许多静态常量(这些参数应该只是开发人员调整而不是用户)。

在NDK方面,我有一个包含所有这些常量值的头文件(.h)。同样,在Java方面,我有一个跟踪相同变量(复制)的类。

是否有一个地方(一个文件)我可以存储这些常量以供Java和C ++使用?也许类似于XML文件,所以开发人员只需调整那里的常量?

如果是这样,我应该如何正确实施它(获取)。

1 个答案:

答案 0 :(得分:0)

请谨慎使用下面的解决方法,但这可能会为您节省一些开发工作。

从一个简单的Java类开始:

package com.example.hellojni;

public class Settings {
    public final static int ANSWER = 42;
}

这是 UseSettings.h

#pragma once
#define package struct { struct { bool hellojni; } example; } com = {{true}}; static bool com_example_hellojni_Settings =
#define public
#define final const
#define class struct
#include "../java/com/example/hellojni/Settings.java"
;
#undef class
#undef final
#undef public
#undef package

现在您可以在C ++文件中编写类似

的文件
#include "UseSettings.h"
int answer = Settings::ANSWER;

这个解决方案可能会被调整以适用于C99,但我没有付出足够的努力。

更新

类似的方法可以应用于简单的枚举

package com.example.hellojni;

public enum Test {
    test1,
    test2,
    test3
}

#define public
#define package static struct { struct { bool hellojni; } example;} com {true}; static bool com_example_hellojni_Test =

#include "…/Test.java"

#undef public
#undef package