Android库项目 - 如何获取上下文?

9

我一直在愉快地重构来自同一个应用程序(付费/免费)不同版本的代码,将其转化为Android库项目,以便实际应用程序可以简单地自定义库并减少代码重复。

有一件事让我开始疑惑了,即库代码中的getApplicationContext()是什么意思?它与子应用程序获得的ApplicationContext相同吗?当我从库项目的getApplicationContext()访问SharedPreferences而不是原始应用程序的getApplicationContext()时会发生什么?SharedPreferences文件是相同的还是不同的?

如果我使用活动来访问SharedPreferences呢?活动现在是库活动而不是原始应用程序,这有关系吗?SharedPreferences是否相同?

感谢您的解释。

2个回答

13

当APK被打包时,所有的类都将属于主应用程序。

调用getApplicationContext().getPackageName()将返回应用程序的包名,而不是库的包名。

我有一个免费/付费应用程序的相同设置,并且在将我的类移动到库项目中时没有任何问题。

但是您必须检查您的xml文件(清单、小部件等)以使用库项目的完整包名。


我进行了一些测试,发现SharedPreferences没有受到影响。我还看到getPackageName()返回子应用程序的包名。谷歌为库提供了有限的文档...感谢确认。 - amit
在我的情况下,SharedPreferences受到影响,并且getPackageName()在每种情况下返回相同的结果。但是,在context.toString()中有所不同。 - w_g

1

一个库项目几乎就像是将所有代码放在一个项目中。与命名空间相关的一些事情需要注意,但通常它非常有效。

例如,您的库有自己的命名空间

库包名称=uk.co.lib 主应用程序包名称=uk.co.app

您想从主应用程序访问的库中的活动必须添加到应用程序清单中。在库项目中命名为A的活动将像这样添加到主应用程序的清单中:

<activity android:name="uk.co.lib.A">

访问共享首选项等将从任何命名空间返回相同的结果,并返回应用程序的首选项。

只有一个应用程序,因此只有一个ApplicationContext。


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