Unity2018 设置 Android 程序名称的多语言
如果了解Android开发的话,应该很清楚Android的App名称,是可以多语言的,因为一般会在AndroidManifest.xml中,有如下配置
| 
					 1 2 3 4 5 6 7  | 
						<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.veewo.alienland">   ...   <application android:icon="@drawable/app_icon" android:label="@string/app_name" android:hardwareAccelerated="true">     ...   </application> </manifest>  | 
					
其中 android:label="@string/app_name" 就是设置App在Android桌面显示的名称。而这里使用的 @string/app_name 代表,这个名称,是设置在 res/values/strings.xml 中的。res/values/strings.xml 中的内容如下
| 
					 1 2 3 4  | 
						<?xml version="1.0" encoding="utf-8"?> <resources>   <string name="app_name">This is a App</string> </resources>  | 
					
而我们可以很方便的进行多语言的配置,就是新建对应各种语言的 values 目录,例如:英文对应 values-en,中文对应 values-zh。甚至可以更精细地设置大陆地区使用简体中文 values-zh-rCN,台湾地区使用繁体中文 values-zh-rTW。只需要修改这些目录下对应的 strings.xml 的内容,就可以在不同语言的系统下,显示不同的内容。
由于Unity中Android对应的文件,都放在 Plugins/Android 目录下,并且看了一些文章,也都说在这个目录下建立一个 res 目录,然后把 values 目录放在 res 目录下就可以了。但是经过测试,发现这样并不生效。
然后又找到一篇Unity官方问答平台的回答 Overriding App icon string for Android builds,里面说 values-en 目录应该这样命名 values-b+en。我用这个方案测试了,一样不行。
最后,我不直接打包了,而是 Export Project,才发现了问题。导出的目录结构是这样的
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26  | 
						.  \ProjectName.iml  \build  \build.gradle  \gradle  \gradle.properties  \gradlew  \gradlew.bat  \libs  \local.properties  \proguard-unity.txt  \settings.gradle  \src   \main    \assets    \java    \jniLibs    \res    \AndroidManifest.xml  \unity-android-resources   \AndroidManifest.xml   \build   \build.gradle   \project.properties   \res   \unity-android-resources.iml  | 
					
我期望 Plugins/Android/res 目录中的内容被拷贝到 src/main/res,而实际上,内容被拷贝到了 unity-android-resources/res 中。 其中 unity-android-resources 是一个Module的存在,所以代码是可以被正常访问的,但是我需要 values 被放到主项目的目录下。
Unity是支持自定义 gradle 脚本模板的,于是我想在 build.gradle 上做文章。
- 进入 
Player Settings/Android/Publishing Settings,把Custom Gradle Template勾起来。此时,Unity会自动生成文件Assets/Plugins/Android/mainTemplate.gradle。 - 打开 
mainTemplate.gradle文件,在末尾添加 
| 
					 1 2 3 4 5 6 7 8  | 
						task localizeAppName(type: Copy) {     from("${project.rootDir}/unity-android-resources/res/") {         include "**"     }     into "${project.rootDir}/src/main/res" } preBuild.dependsOn(localizeAppName)  | 
					
大功告成。