我已将一些Android支持库添加到我的项目中,现在我基本上面临与此问题中描述的相同的问题:Android Studio exports strings from support library to APK
由于我不能使用Xamarin的Gradle设置,我无法使用StackOverflow答案中描述的解决方案。
有没有人有一个想法,我如何才能在我的最终APK文件中保留特定的本地化?
通常,在Xamarin中,AndroidManifest处理使用库的特殊指令Android.App.UsesLibraryAttribute(字符串名称,需要bool)设置将在生成的Manifest.XML中的特定包含和排除。
另据我所知,只有三种方法可以设置链接排除,第一种和第二种方式都是@sunseeker提到的,但是Xamarin文档和开发人员注意强烈建议不要使用如上所述的Full,并且一般主张使用以下内容:
SdkOnly(默认)
上面提到的第二个也是针对特定的排除项,除非您确定特定的包不会被层次结构中的扩展类“幕后”调用,否则也建议不要使用它。
最后,第三种方法是将LinkMode设置为None,而使用AndroidManifest接口规定特定链接。
提高效率的其他一些方法是:
这与Xamarin的构建知识有关,希望它有所帮助。
现在无法真正检查它,但你有没有看过解决方案AndroidLinkSkip
文件中的AndroidLinkMode
和reference(.csproj
)标签?
所以,它就像是
<AndroidLinkMode>Full</AndroidLinkMode>
<AndroidLinkSkip>Mono.Android.Export;I18N;I18N.West</AndroidLinkSkip>
另外,看看MandroidI18n
。从上面的same reference:
指定应用程序附带的国际化支持,例如排序规则和排序表。该值是一个或多个不区分大小写的值的逗号或分号分隔列表
<MandroidExtraArgs>-i18n=west</MandroidExtraArgs>
要么
<MandroidI18n>West</MandroidI18n>
所以我终于设法以理智的方式做到了这一点
Apktool
下载https://ibotpeaches.github.io/Apktool/apktool d MyApp.apk
对其进行反编译MyApp
创建的Apktool
目录并查找res
目录values
目录,例如,如果您的应用程序仅支持德语,请删除values-fr
,values-es
等等,但不要删除values-de
。不要删除非语言目录,例如values-v11
!apktool b MyApp
重新编译您的应用程序MyApp/dist/MyApp.apk
。拿这个文件并用signtool签名,然后将其压缩。我确信这个过程可以自动化,只要我有一个脚本,我就会更新这个答案。
您是否尝试过Borris Spinner的解决方案:
您可以在项目文件中提供AndroidResgenExtraArgs
并添加-c en,de
等。
查看aapt文档:
-c specify which configurations to include. The default is all
configurations. The value of the parameter should be a comma
separated list of configuration values. Locales should be specified
as either a language or language-region pair. Some examples:
en
port,en
port,land,en_US