XML 从另一个 XML 文件获取值

ten*_*kii 3 xml android

我正在尝试构建一个使用 Google Map API 的 Android 应用程序,并且我想将该项目放在 GIT 上。所以我有一个 API 密钥,此信息位于 AndroidManifest.xml 中,如下所示(我已将实际的 API 密钥替换为*key*此处

<meta-data
android:name="com.google.android.geo.API_KEY"
android:value= *key* />
Run Code Online (Sandbox Code Playgroud)

我不希望将这些敏感信息推送到 git 上,但我无法 gitignore 这个文件。是否可以制作另一个具有密钥的 XML 文件,并让 AndroidManfiest.xml 从那里获取它(以便我可以 gitignore 这个文件)?

AndroidManifest.xml 有这段代码

<activity
android:name=".MapsActivity"
android:label="@string/title_activity_maps"
android:launchMode="singleTop" />
Run Code Online (Sandbox Code Playgroud)

我注意到 label 属性从位于 res/values/strings.xml 中的另一个 XML 文件获取其值,因此:

  1. AndroidManifest.xml 如何知道在哪里找到值label
  2. 是什么@意思?
  3. 我可以将 XML 文件(称为 Config.xml)放在任何地方吗?或者它必须在res文件夹中?

Pav*_*ngh 5

为了避免上传您的密钥:

  1. 在属性文件中创建密钥并将该文件添加到 .gitignore 中

     API_KEY=XXXXXXXXXXX
    
    Run Code Online (Sandbox Code Playgroud)

    在里面.gitignore,添加路径

     secretKeys.properties 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 读入文件app/build.gradle并使用创建字符串资源变量buildConfigField

     def apikeyPropertiesFile = rootProject.file("apikey.properties")
     def apikeyProperties = new Properties()
     apikeyProperties.load(new FileInputStream(apikeyPropertiesFile))
    
     android {
    
       defaultConfig {
    
         buildConfigField("String", "API_KEY", apikeyProperties['API_KEY'])
       }
     } 
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用创建的变量!

请关注博客以获取完整的详细信息。

AndroidManifest.xml 如何知道在哪里可以找到标签的值

Android 构建会为所有 XML 内容生成一个R.java文件,并将所有出现的 XML 内容与该文件中的值进行映射R.Java

@是什么意思?

这是一个特殊的符号,解析器用来解析特定的字符串资源。例如,@+id/root意味着将其解析为id资源字符串以替换 中的值R.java

我可以将 XML 文件(称为 Config.xml)放在任何地方吗?或者它必须位于 > res 文件夹中?

是的,它必须位于res文件夹中。