【问题标题】:Android reading from local.propertiesAndroid 从 local.properties 读取
【发布时间】:2017-05-11 16:30:46
【问题描述】:

我的项目根目录中有 local.properties 文件。

sdk.dir=C\:\\Users\\vucet\\AppData\\Local\\Android\\Sdk
versionName='7.0'

在 app 模块的 build gradle 中,我试图以这种方式获取 versionName

Properties properties = new Properties()
if (project.rootProject.file('local.properties').exists()) {
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
}

def getVerCode = { ->
    def code = project.hasProperty("versionCode") ? project.versionCode.toInteger() : 1000
    return code
}

def getVerName = { ->
    def name = project.hasProperty("versionName") ? project.versionName.toString() : "5.0"
    return name
}

但每次我得到 5.0 的值。请问谁能帮帮我?

【问题讨论】:

  • versionNamelocal.properties移动到gradle.properties,然后你可以直接引用它作为一个全局定义的常量。

标签: android gradle android-gradle-plugin build.gradle


【解决方案1】:

使用 gradle 读取 local.properties 并在您的 Android 应用程序 java 代码中使用它们。

local.properties:

TOKEN="yyyyy" SERVER_URL="https://foo.com"

build.gradle:

Properties properties = new Properties()
if (project.rootProject.file('local.properties').canRead()) {
        properties.load(project.rootProject.file("local.properties").newDataInputStream())
}

buildConfigField 'String', 'TOKEN', properties.getProperty('TOKEN', '"xxx"')
buildConfigField 'String', 'SERVER_URL', properties.getProperty('SERVER_URL', '"https://example.com/"')

安卓java代码

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    Log.d("TAG", "My 'token' is: " + BuildConfig.TOKEN);
    Log.d("TAG", "My 'server url' is: " + BuildConfig.SERVER_URL);

}

【讨论】:

    【解决方案2】:

    您好,我找到了如何在 gradle 脚本中读取 local.properties 文件的方法

    def Properties properties = new Properties()
    
    if (project.rootProject.file('local.properties').canRead()) {
        properties.load(new FileInputStream(project.rootProject.file('local.properties')))
        def versionBuild = properties['versionName'].toString()
    
    } else {
        throw new GradleException("Could not read version.properties!")
    }
    
    def getVerCode = { ->
        def code = properties.getProperty("versionCode", "1").toInteger()
        return code
    }
    
    def getVerName = { ->
        def name = properties.getProperty("versionName", "1")
        return name
    }
    

    【讨论】:

      【解决方案3】:

      最好创建新的 data.properties 文件,该文件将包含您的所有密钥、令牌、主机 URL、机密等。 确保在 app 文件夹下创建,这意味着 src 文件夹&此文件将在相同的路径或层次结构中。

      ===>data.properties 文件

      GMAP_KEY="AIzaSyDthaO7P************************SSSD"
      HOST_LIVE="https://google.co.in/"
      HOST_STAGING="http://amazon.com/"
      BASE_IMAGE_PATH="https://amazonaws.com/s3/bucket25"
      COMPANY_ID="57c3db87dacc********"
      

      ===>应用级 build.gradle 文件

      
      def getSecretKeys(){
          def keyFile = file("data.properties")
          def secretKeys = new Properties()
          secretKeys.load(new FileInputStream(keyFile))
          return secretKeys
      }
      
      
      release {
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
          buildConfigField 'String', 'BASE_PATH', getSecretKeys()['HOST_LIVE']     
          buildConfigField 'String', 'BASE_PATH_IMAGE', getSecretKeys()['BASE_IMAGE_PATH']
          buildConfigField 'String', 'MAP_KEY', getSecretKeys()['MAP_KEY']
          buildConfigField 'String', 'COMPANY_ID', getSecretKeys()['COMPANY_ID']
      }
      debug {
          ext.enableCrashlytics = false
          buildConfigField 'String', 'BASE_PATH', getSecretKeys()['HOST_STAGING']
          buildConfigField 'String', 'BASE_PATH_IMAGE', getSecretKeys()['BASE_IMAGE_PATH']
          buildConfigField 'String', 'MAP_KEY', getSecretKeys()['MAP_KEY']
          buildConfigField 'String', 'COMPANY_ID', getSecretKeys()['COMPANY_ID']
      }
      

      ==>Android java 代码

      @Override
      public void onCreate(Bundle savedInstanceState) {
          ...
          Log.d("TAG", "My Map key is: " + BuildConfig.MAP_KEY);
          Log.d("TAG", "My URL Base Path is: " + BuildConfig.BASE_PATH);
      
      }
      

      【讨论】:

        【解决方案4】:

        我只能这样做才能阅读

        Properties props = new Properties()
        props.load(new FileInputStream(new File('local.properties')))
        

        然后

        props['KEY']
        

        【讨论】:

          【解决方案5】:

          尝试打印 versionName 以检查在此之前您是否没有做错任何事情:

          def getVerName = { ->
              println project.versionName.toString()
              ...
          }
          

          或者,如果可以,请尝试使用 gradle.properties 文件,因为您可以直接从 build.gradle 访问属性:

          gradle.properties:

          versionName='7.0'
          

          build.gradle:

          task printProps << {
              println versionName
              ...
          }
          

          【讨论】:

          • &lt;&lt;,不推荐使用左移,请联系我们doLast { }
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-03-26
          • 1970-01-01
          • 2014-01-07
          • 2022-08-24
          • 2022-08-09
          • 2015-01-20
          • 2012-08-15
          相关资源
          最近更新 更多