[英]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 文件中获取其值,因此:
label
的值@
是什么意思?res
文件夹中?为避免上传您的密钥:
在属性文件中创建密钥并将文件添加到 .gitignore
API_KEY=XXXXXXXXXXX
在.gitignore
,添加路径
secretKeys.properties
读取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']) } }
使用创建的变量!
请关注博客以获取完整详细信息。
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.