繁体   English   中英

XML 从另一个 XML 文件中获取值

[英]XML getting values from another XML file

我正在尝试构建一个使用 Google Map API 的 android 应用程序,我想将此项目放在 GIT 上。 所以我有一个 API 密钥,这个信息在 AndroidManifest.xml 中是这样的(我在这里用*key*替换了我的实际 API 密钥

<meta-data
android:name="com.google.android.geo.API_KEY"
android:value= *key* />

我不想在 git 上推送这些敏感信息,但我不能 gitignore 这个文件。 是否可以制作另一个具有密钥的 XML 文件并使 AndroidManfiest.xml 从那里获取它(以便我可以忽略这个文件)?

AndroidManifest.xml 有这段代码

<activity
android:name=".MapsActivity"
android:label="@string/title_activity_maps"
android:launchMode="singleTop" />

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

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

为避免上传您的密钥:

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

     API_KEY=XXXXXXXXXXX

    .gitignore ,添加路径

     secretKeys.properties
  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']) } }
  3. 使用创建的变量!

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

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

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

@是什么意思?

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

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

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

您应该能够将秘密字符串放在其自己的 XML 文件中并将该文件添加到您的 gitignore。 然后,您可以在AndroidManifest.xml引用该字符串。

例子:

app/src/main/res/values/secrets.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="google_api_key">abcdefg-12345</string>    
</resources>
app/src/main/AndroidManifest.xml

<manifest ...>
    <application ...>
        ...
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_api_key" />
        ...
    </application>
</manifest>

回答您的问题:任何 Android XML 文件(如 AndroidManifest.xml、布局和其他文件)都将属性的值解释为原始字符串,除非它以@开头。 @前缀告诉它查找资源。 @string表示字符串资源, @layout手段布局, @drawable手段绘制, @id手段的ID,等这些资源,各自在自己的文件通常定义,但并非总是如此。 无论如何,该文件始终位于res的子目录中。 对于您的情况,字符串在res/values/some_file.xml中定义。 您可以在res/values创建任意数量的文件,并且所有这些文件的内容在 AAPT 编译步骤期间合并在一起,因此您可以通过定义的名称引用它们中的任何一个,而不管文件名如何。

查看https://developer.android.com/guide/topics/manifest/meta-data-element有关<meta-data>标签和https://developer.android.com/guide/topics/resources 的更多信息/string-resource获取有关字符串资源的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM