Android,在库项目中提供应用程序特定常量的最佳方法?

jam*_*esc 13 android shared-libraries

我正在为许多Android应用程序创建一个库项目.这些应用程序都有一些我希望包含在库项目中的常用功能,但库项目功能需要使用特定于应用程序的常量

所以我正在寻找一种方法来为库函数提供常量的名称,并允许每个应用程序定义它们

特定应用程序常量的示例以及如何在库项目中使用它

public class AppConstants {
    public static final long APP_ID = 6;//Needs to be set for each app
}

public static long getCurrentAppId(Context context) {
    return getLongPreference(context, CURRENT_APP_ID_KEY, AppConstants.APP_ID);
}
Run Code Online (Sandbox Code Playgroud)

这只是需要为每个应用程序为大量库函数定义的大约60个常量的一个示例

显然,我通常只会导入/包含项目特定的app_constants.java文件,但这在库项目文件中是不可能的,因为它没有得到关于特定应用程序的线索(这是正确的)

那么让每个特定应用程序覆盖常量的最佳方法是什么?

更新 我花了很长时间来决定哪些极好的答案我提供了最适合我的需求(谢谢大家)最后我选择了xml解决方案.我不是特别喜欢它,因为它混乱了我的应用程序资源,我认真考虑使用接口解决方案,但xml解决方案确实很好用

con*_*eur 20

选项#1在每个项目中扩展AppConstants类

更好的选项#2使用XML资源来定义常量

<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="integer" name="app_id" format="integer">6</item>
</resources>
Run Code Online (Sandbox Code Playgroud)

然后你可以通过它来检索它们

Context.getResources().getInteger(R.integer.app_id);
Run Code Online (Sandbox Code Playgroud)

将xml文件添加到每个项目的资源中,只需要您需要的值

  • 如果您在库和应用程序中定义具有相同ID的资源,则从库中获取应用程序的值(否则为库).因此,对于您希望覆盖每个应用程序的值,这是一个非常好的方法.由于它使用资源系统,您甚至可以为每个配置执行值(横向与纵向等) (2认同)