我的团队与Git合作,现在我们正在构建一个Android应用程序。这个应用程序消耗我们的web服务,每个开发人员在开发时都在自己的计算机上构建。
由于我们无法在应用内部使用localhost
(因为它指向设备本身),因此我们必须指定网络地址(例如192.168.1.123
),现在它已经硬编码了。问题是,我们的网络地址大多不一样,然后每个开发人员必须手动编辑地址才能进行编码。
我正试图找出更有趣的方法来完成这个过程。我的第一个猜测是我可以做一些像Rails'config/application.yml
或类似Spring Boot的application.properties
。此文件位于.gitignore
,并且在设置其开发环境时,每个开发人员都会在其中的变量中设置其网络地址。这种方法很好,主要是因为我们可以在CI服务器中设置此文件,然后可以在生产环境中自动部署(例如,指向my-aplication.com
而不是开发人员网络地址)。
我一直在想的另一种方法是使用类似my-application.dev
的东西,然后让主机(当使用模拟器时)解析它的主机文件,然后循环回来。这种方法存在两个主要问题:a)我们希望将设置保留在项目的文件夹中。 b)部署到生产时,我们会手动编辑它。
那么,有什么方法可以做到这一点?请记住,我们很高兴将此设置放在项目的文件夹中,而不是依赖于IDE。
提前致谢!
答案 0 :(得分:0)
定义Properties
def Properties props = new Properties()
props.load(new FileInputStream(rootProject.file('app/custom.properties')))
随后:
buildConfigField "String", "CUSTOM_FIELD", '"'+props['customFieldName']+'"'
您的custom.properties
应包含以下内容:
customFieldName=customString
答案 1 :(得分:0)
步骤1:在项目根目录中的gradle.properties
中定义一个包含相关IP地址的属性,例如:
DEV_SERVER_URL=https://192.168.1.123
步骤2:在您的app/build.gradle
文件中,通过buildConfigField
或可能通过resValue
公开该属性,以通过BuildConfig
将其提供给Java代码或字符串资源。要获得额外的功劳,请仅使用debug
构建类型中的属性,使用release
中的生产值(可能指向生产Web服务器)。例如:
debug {
buildConfigField "String", "SERVER_URL", '"'+DEV_SERVER_URL+'"'
}
release {
buildConfigField "String", "SERVER_URL", '"https://prod.this-is-so-fake.com"'
}
步骤3:修改Java代码以引用您在步骤2中设置的BuildConfig
字段或字符串资源。