jni java共享变量_如何在android JNI中共享Java和C之间的变量?

我最近有这个问题,可以解决它.我有一个C Qt Android项目需要执行一些java代码(只能从Android SDK访问).为了实现这一点,我必须在我的java和C代码之间共享一些常量(让它们一起交谈并相互理解).

以下是实现此目的的可能解决方案:

>在创建时让C将常量值传递给Java对象(或者如果Java调用C,则将其传递给Java对象).但是如果你有很多变数那就很难过了.

>让C和Java模块动态解析配置文件.应该工作,但没有尝试.

>在两个地方声明变量……糟糕的想法和难以维护

> C和Java都有一个直接使用的声明文件(‘included’)

我终于做了最后的解决方案.我的想法是让C和Java都使用一个java文件(这种方式可能有用,但我更像是一个C人,所以这对我来说更容易).我们使用预处理器使这个java文件有效,被C包含为头文件!

下面是一个Java文件(constants.java)声明常量(整数和字符串)的示例:

package name1.name2.name3;

import java.lang.String;

class MyConstants

{

public static String THE_NAME() { return "Name"; }

public static Integer THE_VALUE() { return 12; }

};

从任何Java代码访问变量都可以毫无问题地使用它.

现在,这是如何从C文件中包含它:

#include

using namespace std;

#define public public:

#define package struct mockup1 { int name3; };struct mockup2 { mockup1 name2; };int i1 =

#define name1 mockup2()

#define import struct mockup3 { int String; };struct mockup4 { mockup3 lang; };int i2 =

#define java mockup4()

#define String string

#define Integer int

#include "constants.java"

#undef public

#undef String

#undef package

#undef import

#undef java

#undef name3

预处理器然后将constants.java文件更改为这个有效的C头文件(主要的困难是获取包和导入行,因为你不能在宏名称中使用点….必须是恶意的):

struct mockup1 { int name3; };struct mockup2 { mockup1 name2; };int i1 = mockup2().name2.name3;

struct mockup3 { int String; };struct mockup4 { mockup3 lang; };int i2 = mockup4().lang.String;

class MyConstants

{

public: static string THE_NAME() { return "Name"; }

public: static int THE_VALUE() { return 12; }

};

在这里,您将使用C中的常量!

int main()

{

cout << MyConstants::THE_NAME() << MyConstants::THE_VALUE() << endl;

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值