我有一个免费的android应用程序,我将添加一些只能通过付费版本才能获得的功能。免费的应用程序将数据硬编码到应用程序中。通常在strings.xml文件中。付费版本将从JSON API获取数据。比免费应用程序要多得多的数据。接口将保持不变。但是单击某些按钮时的功能将改变。我是否需要为每个版本创建两个MainActivity。或者,如何通过修改的费用来更改付费版本的功能。我想这个问题可以归结为免费和付费版本的软件设计模式,我正努力弄清楚。 我已经添加了
productFlavors {
lite {
applicationId "com.sample.appname.lite"
buildConfigField 'boolean', 'IS_PAID', 'false'
versionCode 1
versionName '1.3-free'
}
pro {
applicationId "com.sample.appname.pro"
buildConfigField 'boolean', 'IS_PAID', 'true'
versionCode 1
versionName '1.0-paid'
}
}
我在src文件夹下创建了一个免费的付费Java文件夹。但是不知道我是否需要为付费版本创建一个新的MainActivity,为我的免费版本创建另一个。 任何帮助表示赞赏
答案 0 :(得分:1)
您可以通过以下方式执行此操作:
InfoRepository
,但应根据所加载的数据类型将其命名为更有意义的类)。您将有两个此类的实例:一个在paid
文件夹中,另一个在free
中。它们都具有getInfo()
方法,该方法返回Info
对象的列表(例如)。
getInfo()
。 (附带说明:可能值得考虑将数据放入raw
文件夹中的json文件中,以便无论数据是付费还是免费的,数据加载都是相同的)getInfo()
进行解析,然后返回最终结果,以实现MainActivity
。 main
(仅InfoRepository
java文件夹中的一个实例)中,创建一个getInfo()
类实例,然后调用MainActivity
来填充屏幕。这将从免费版本的字符串中加载信息,或者在付费版本中使用API。 InfoRepository
不在乎数据来自何处,它只是在乎要显示一些数据。每种口味中的InfoRepository
类都负责从正确的来源加载它。 一些注意事项:
Note
。我不知道您的用例是什么,但是例如,假设您有一个Score
列表,如果用户单击“显示注释”按钮,则会显示该列表,而{{1}如果他们点击“显示得分”按钮,则会显示这些信息。在这种情况下,getNotes()
中可能有两种方法,getScores()
和InfoRepository
。 Deferred
对象。