我正在按照此解决方案在我的字符串资源文件中使用enetities:
是否可以直接在Android资源XML文件中进行字符串替换?
我在资源树中使用外部文件:/res/raw/entities.dtd,其内容:
<!ENTITY ent_devicename "MyDeviceName">
Run Code Online (Sandbox Code Playgroud)
在string.xml资源文件中:
<!DOCTYPE resources [
<!ENTITY % ent_devicename SYSTEM "../raw/entities.dtd">
%ent_devicename;
]>
<resources>
<string name="name">The name is &ent_devicename;</string>
</resources>
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
实体"ent_devicename"已被引用,但未被声明.
如您所见,Android Studio可识别外部实体文件:
和实体:
有人能提供一个正确的例子来使事情有效吗?我的意思是一个完全可编译的Android Studio项目,在单独的文件中包含实体声明.
更新 好的,如果你更加关注这个w3schools链接:
https://www.w3schools.com/xml/xml_dtd_entities.asp
你看到了解决方案:
外部entities.dtd文件包含
<!ENTITY ent_devicename "MyDeviceName">
Run Code Online (Sandbox Code Playgroud)
那么新的字符串资源资源:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY ent_devicename SYSTEM "../raw/entities.dtd">
]>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="Typos">
<string name="ent_devicenamxxe2">&ent_devicename;</string>
Run Code Online (Sandbox Code Playgroud)
我改变了<!ENTITY % ent_devicename对<!ENTITY ent_devicename(不再%)我删除%ent_devicename;
现在它编译但是生成的APK似乎忽略了实体值(使用空字符串).所以问题没有解决!
让我知道!
xml dtd android-resources android-studio android-gradle-plugin