gpt4 book ai didi

java - 如何使用Libcore.os设置环境变量

转载 作者:行者123 更新时间:2023-12-01 21:51:05 29 4
gpt4 key购买 nike

我正在尝试使用 Libcore 设置环境变量,因此我使用了以下答案:

How do I set environment variables from Java?

在 Android 上,该接口(interface)通过 Libcore.os 作为一种隐藏的 API 公开。

Libcore.os.setenv("VAR", "value", bOverwrite);Libcore.os.getenv("VAR"));

Libcore 类以及接口(interface)操作系统是公共(public)的。只是缺少类声明,需要向链接器显示。不需要将类添加到应用程序中,但如果包含它也不会造成伤害。

package libcore.io;

public final class Libcore {
private Libcore() { }

public static Os os;
}

package libcore.io;

public interface Os {
public String getenv(String name);
public void setenv(String name, String value, boolean overwrite) throws Exception;
}

但是,当我这样做时,它似乎不起作用,因为当我在 C 代码中执行 getenv 时,我没有得到任何返回值。

当我这样做时

char* p;
setenv("VAR", "test variable", 1);
p = getenv("VAR");
LOG(ERROR) << "Test" << p;

它工作正常。

我所做的是为 Libcore.java 和 Os.java 创建两个虚拟文件,并使用我的主代码编译它们:

这是我的 Java 代码:

try{
Libcore.os.setenv("VAR", "value", true);
}catch(Exception e){

Log.d("Test set",e.toString());
}

我的 C 代码如下:

char* p;
p = getenv("VAR");
LOG(ERROR) << "Test" << p;

我可以使用 JNI,但我试图弄清楚为什么 libcore 不起作用。是否需要与编译器命令一起使用一些特殊命令才能使用系统 Libcore?

最佳答案

您可以使用反射动态调用该类。

try {
Class < ? > libcore = Class.forName("libcore.io.Libcore");
if (libcore == null) {
Log.w(TAG, "Cannot find libcore.os.Libcore;");
// return;
} else {
final Object os = Class.forName("libcore.io.Libcore").getField("os").get(null);

Method method = os.getClass().getMethod("setenv", String.class, String.class, boolean.class);
method.invoke(os, "value", "test", true);



}
} catch (Exception e) {
Log.w("Sam1", Log.getStackTraceString(e));
Log.w("Sam1", e.getMessage());
}

关于java - 如何使用Libcore.os设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35193646/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com