我很高兴地将同一应用程序的不同版本(付费/免费)中的代码重构为Android库项目,以便实际的应用程序可以简单地自定义库并减少代码重复。
我开始怀疑的一件事是库代码中的getApplicationContext()
是什么意思?与儿童应用程序相同的ApplicationContext
是一样的吗?当我从库项目的SharedPreferences
而不是原始应用的getApplicationContext()
访问getApplicationContext()
时会发生什么? SharedPreferences
文件是相同还是不同?
如果我使用该活动访问SharedPreferences
该怎么办?活动现在是图书馆活动而不是原始应用程序是否重要? SharedPreferences
是否相同?
感谢您澄清。
答案 0 :(得分:13)
当打包APK时,所有类都将属于主应用程序。
调用getApplicationContext()。getPackageName(),它将返回应用程序的包名,而不是库的包。
对于免费/付费应用程序,我有相同的设置,当我将课程移动到图书馆项目时没有问题。
但是,您必须检查xml文件(清单,小部件等)以使用库项目的完整包名。
答案 1 :(得分:1)
库项目几乎就像在一个项目中拥有所有代码一样。有一些与命名空间相关的事情需要注意,但通常效果很好。
e.g。您的库有自己的命名空间
图书馆包名= uk.co.lib 主应用程序包名称= uk.co.app
您希望从主应用程序访问tro的库中的活动必须添加到应用程序清单中。库项目中名为A的活动将添加到主应用程序中的清单中,如下所示:
<activity android:name="uk.co.lib.A">
访问共享首选项等会从任一名称空间中获得相同的结果,并会返回该应用程序的首选项。
只有一个应用程序,因此只有一个ApplicationContext