如何在多个模块之间共享字符串?

6
我有三个模块:mod1mod2mod3。模块 mod1 依赖于 mod2mod3
我想要一个字符串(特别是 UserAgent,因为这三个模块都需要与某个服务器进行HTTP通信,并且它们都应该设置相同的用户代理)在这三个模块之间共享。

1
mod1mod2mod3是Gradle模块还是同一应用程序的独立部分? - Danail Alexiev
“Gradle模块”是指库依赖(从Maven仓库中获取)吗?不,它们是模块依赖(可能是您所谓的“同一应用程序的独立部分”)。 - Marian Paździoch
1
一开始想到的是创建一个库模块,让 mod1mod2mod3 依赖于它。但考虑到你只想共享一个字符串,这可能有些过度设计了。 - Danail Alexiev
@MarianPaździoch,你觉得我的解决方案怎么样? - Oleksandr
我认为这是目前为止最好的。 - Marian Paździoch
@MarianPaździoch,你有没有找到更好的解决方案来解决这个问题?我遇到了模块之间共享变量的问题,也许有比我提供的更好的解决方案。谢谢。 - Oleksandr
3个回答

1
一种方法是创建一个公共类,其中包含编写和读取信息的方法。
    public static String readnote(Context context, String str) {
    if (context == null) throw new RuntimeException ("Context is null");
    SharedPreferences sp = context.getSharedPreferences("somenameyouchoose", 0);
    String mycontent = sp.getString(str);
    return mycontent;
}

public static String writenote(Context context, String str) {
    if (context == null) throw new RuntimeException ("Context is null");
    SharedPreferences sp = context.getSharedPreferences("somenameyouchoose", 0);
    SharedPreferences.Editor editor = sp.edit();
    editor.putString(str);
    editor.commit();
    return str;
}

你可以编写 writenote (this, "myUserAgent") 和 readnote (this, "myUserAgent") 来实现此功能。

如果使用 Intent,另一种方法是使用 intent.putExtra。


@ Marian请检查并确认哪个答案对于帮助您解决问题更有帮助。谢谢。 - statosdotcom

0
在顶层构建文件的子项目条目中添加构建配置字段。
它将类似于这样:
subprojects {
    afterEvaluate { project ->
        if (project.hasProperty("android")) {
            android.defaultConfig {
                buildConfigField 'String', 'USER_AGENT', "\"Android-agent\""
            }
        }
    }
}   

然后在每个模块的BuildConfig文件中,您将看到:

public static final String USER_AGENT = "Android-agent";

顺便说一句,也许这不是最好的Android子项目检测实现方式,但这是我所知道的最好的方法。


0
如果你想要将这个“一串字符串”作为其他模块的通用字符串,那么你可以将它放在一个名为mode0的公共模块中,包括你想要共享给其他模块的String值在它的strings.xml文件中。然后你可以将mode0作为其他模块的依赖项添加进去。虽然这可能不是最好的方法,但希望这对你有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接