- 浏览: 828993 次
- 性别:
- 来自: 哈尔滨
文章分类
最新评论
-
doloveme:
$sudo cp MONACO_Linux.ttf /usr/ ...
terminator 的配置 -
腾讯rep:
lowser
RSA加密算法c++简单实现 -
csuhanyong:
好YD啊,好YD
一图流:机械键盘各轴区别 -
doloveme:
1。其中:extman ,extmail下载http://ww ...
Ubuntu下安装postfix+extmail邮件服务器 -
doloveme:
repo sync出现“fatal: '../platform ...
Android 编译环境配置搭建(Ubuntu 12.04)及环境导致编译错误QA
本文是主要对android定制多语言的问题进行深入研究后,总结了其定制的机制和其具体实现方法。如果想深入了解其定制的机制,可阅读本文第一部分,如果只想了解如何定制,请参考第二部分。
第一部分 多语言定制的机制
1、ICU4C简介
ICU4C(ICU for C,http://site.icu-project.org/) 是ICU在C/C++平台下的版本, ICU(International Component for Unicode)是基于"IBM公共许可证"的,与开源组织合作研究的, 用于支持软件国际化的开源项目。ICU4C提供了C/C++平台强大的国际化开发能力,软件开发者几乎可以使用ICU4C解决任何国际化的问题,根据各地的风俗和语言习惯,实现对数字、货币、时间、日期、和消息的格式化、解析,对字符串进行大小写转换、整理、搜索和排序等功能,必须一提的是,ICU4C提供了强大的BIDI算法,对阿拉伯语等BIDI语言提供了完善的支持。
ICU首先是由Taligent公司开发的,Taligent公司现在被合并为IBM?公司全球化认证中心的Unicode研究组,然后ICU由IBM和开源组织合作继续开发,开源组织给与了ICU极大的帮助。
开始ICU只有Java平台的版本,后来这个平台下的ICU类被吸纳入SUN公司开发的JDK1.1,并在JDK以后的版本中不断改进。C++和C平台下的ICU是由JAVA平台下的ICU移植过来的,移植过的版本被称为ICU4C,来支持这C/C++两个平台下的国际化应用。 ICU4J和ICU4C区别不大,但由于ICU4C是开源的,并且紧密跟进Unicode标准,ICU4C支持的Unicode标准总是最新的;同时,因为JAVA平台的ICU4J的发布需要和JDK绑定,ICU4C支持Unicode标准改变的速度要比ICU4J快的多。
2、 ANDROID语言包
Android 使用的语言包就是ICU4C,位置:external/icu4c。Android支持的语言有: Locale CANADA
Locale constant for en_CA.
Locale CANADA_FRENCH
Locale constant for fr_CA.
Locale CHINA
Locale constant for zh_CN.
Locale CHINESE
Locale constant for zh.
Locale ENGLISH
Locale constant for en.
Locale FRANCE
Locale constant for fr_FR.
Locale FRENCH
Locale constant for fr.
Locale GERMAN
Locale constant for de.
Locale GERMANY
Locale constant for de_DE.
Locale ITALIAN
Locale constant for it.
Locale ITALY
Locale constant for it_IT.
Locale JAPAN
Locale constant for ja_JP.
Locale JAPANESE
Locale constant for ja.
Locale KOREA
Locale constant for ko_KR.
Locale KOREAN
Locale constant for ko.
Locale PRC
Locale constant for zh_CN.
Locale SIMPLIFIED_CHINESE
Locale constant for zh_CN.
Locale TAIWAN
Locale constant for zh_TW.
Locale TRADITIONAL_CHINESE
Locale constant for zh_TW.
Locale UK
Locale constant for en_GB.
Locale US
Locale constant for en_US.
3、定制语言
定制语言在PRODUCT_LOCALES字段里添加需要语言,如: PRODUCT_LOCALES := en_US zh_CN,则系统里只有英语和汉语两种语言。然后语言的选择处理是在external/icu4c/stubdata/Android.mk里进行的,如下:
config := $(word 1, \ $(if $(findstring ar,$(PRODUCT_LOCALES)),large) \
$(if $(findstring da,$(PRODUCT_LOCALES)),large) \
$(if $(findstring el,$(PRODUCT_LOCALES)),large) \
$(if $(findstring fi,$(PRODUCT_LOCALES)),large) \
$(if $(findstring he,$(PRODUCT_LOCALES)),large) \
$(if $(findstring hr,$(PRODUCT_LOCALES)),large) \
$(if $(findstring hu,$(PRODUCT_LOCALES)),large) \
$(if $(findstring id,$(PRODUCT_LOCALES)),large) \
$(if $(findstring ko,$(PRODUCT_LOCALES)),large) \
$(if $(findstring nb,$(PRODUCT_LOCALES)),large) \
$(if $(findstring pt,$(PRODUCT_LOCALES)),large) \
$(if $(findstring ro,$(PRODUCT_LOCALES)),large) \
$(if $(findstring ru,$(PRODUCT_LOCALES)),large) \
$(if $(findstring sk,$(PRODUCT_LOCALES)),large) \
$(if $(findstring sr,$(PRODUCT_LOCALES)),large) \
$(if $(findstring sv,$(PRODUCT_LOCALES)),large) \
$(if $(findstring th,$(PRODUCT_LOCALES)),large) \
$(if $(findstring tr,$(PRODUCT_LOCALES)),large) \
$(if $(findstring uk,$(PRODUCT_LOCALES)),large) \
$(if $(findstring zh,$(PRODUCT_LOCALES)),large) \
$(if $(findstring ja,$(PRODUCT_LOCALES)),us-japan) \
$(if $(findstring it,$(PRODUCT_LOCALES)),us-euro) \
$(if $(findstring pl,$(PRODUCT_LOCALES)),us-euro) \
$(if $(findstring cs,$(PRODUCT_LOCALES)),default) \
$(if $(findstring de,$(PRODUCT_LOCALES)),default) \
$(if $(findstring fr,$(PRODUCT_LOCALES)),default) \
$(if $(findstring nl,$(PRODUCT_LOCALES)),default) \
us)
4、默认语言
默认语言的选择实现是在build/core/Makefile里,从PRODUCT_LOCALES里选择第一个语言作为默认语言,如下:
define default-locale $(subst _, , $(firstword $(1)))
endef
# Selects the first locale in the list given as the argument
# and returns the language (or the region)
define default-locale-language $(word 2, 2, $(call default-locale, $(1)))
endef
define default-locale-region $(word 3, 3, $(call default-locale, $(1)))
Endef ... PRODUCT_DEFAULT_LANGUAGE="$(call default-locale-language,$(PRODUCT_LOCALES))" \
PRODUCT_DEFAULT_REGION="$(call default-locale-region,$(PRODUCT_LOCALES))"
然后通过build/tool/buildinfo.sh文件将如下段写到文件build.prop,如下:
echo "ro.product.locale.language=$PRODUCT_DEFAULT_LANGUAGE"
echo "ro.product.locale.region=$PRODUCT_DEFAULT_REGION" 。
因此,要改变默认语言用下面两种方法中的一种就行了:
4.1、在PRODUCT_LOCALES字段里,将要选择的语言放在第一位,如: PRODUCT_LOCALES := en_US zh_CN 默认语言是英语;
4.2、在persist.sys.language 和persist.sys.country 里指定语言,如下: PRODUCT_PROPERTY_OVERRIDES := \
persist.sys.language=zh \
persist.sys.country=CN build.prop文件的处理是在system/core/init/property_service.c。
第二部分 多语言定制的方法
1、多语言定制的实现步骤
1)进入build/target/product目录,在languages_full.mk或languages_small.mk文件中,修改PRODUCT_LOCALES的值,来定制语言,比如PRODUCT_LOCALES := en_US zh_CN zh_TW en_GB fr_FR it_IT de_DE es_ES;
2)相同目录下,修改full.mk文件的
$(call inherit-product, build/target/product/languages_small|full.mk)语句来切换所使用的文件;
3)重新编译即可。
2、设置默认语言的实现步骤
1)进入build/target/product目录,修改文件core.mk的PRODUCT_PROPERTY_OVERRIDES 值,例如,欲修改为默认中文,则增加
“\ persist.sys.language=zh \ persist.sys.country=CN”,增加后的语句如PRODUCT_PROPERTY_OVERRIDES := \
ro.config.notification_sound=OnTheHunt.ogg \
ro.config.alarm_alert=Alarm_Classic.ogg \ persist.sys.language=zh \ persist.sys.country=CN
2)重新编译即可。
3、与多语言定制相关的字段及其所在的文件
PREVIOUS_BUILD_CONFIG out/target/product/dream/previous_build_config.mk
NO_FALLBACK_FONT的定义 device/htc/dream-sapphire/BoardConfigCommon.mk
NO_FALLBACK_FONT的调用 frameworks/base/data/fonts/Android.mk
extra_locales CUSTOM_LOCALES nodpi mdpi hdpi build/core/product_config.mk
PRODUCT_PROPERTY_OVERRIDES build/target/product
build.prop out/target/product/generic/system
发表评论
-
JAVA代码混淆
2016-05-05 18:24 1452JAVA代码混淆 <!--[if !supportL ... -
android 监听状态栏被下拉
2015-12-25 17:23 3477Activity的onWindowFocusChange()方 ... -
android使用mount挂载/system/app为读写权限,删除或替换系统应用
2015-11-27 14:13 4028注意:以下代码中#开头的则为需要执行的shell命令,其他的 ... -
Ubuntu 14.04 文件服务器--samba的安装和配置
2015-11-10 10:49 638jingyan.baidu.com/album/00a07f ... -
linux生成指定大小的文件
2015-08-26 16:02 1696# dd if=/dev/zero of=50M.file ... -
intellij 打开工程在每个java文件上 有个红色的无效符
2015-07-24 13:52 1755说明该类不是可编译文件。在project Structure中 ... -
logcat命令详解
2015-07-22 16:34 982Android日志系统提供了记录和查看系统调试信息的功能。日 ... -
gradle打包遇到的错误汇总
2015-07-21 11:32 0错误1:A problem occurred ... -
Android读写XML(下)——创建XML文档
2015-04-29 11:02 616在前面的2篇文章Android读写XML(上)—— pack ... -
Android读写XML(中)——SAX
2015-04-29 10:54 624在Android读写XML(上) ... -
Android读写XML(下)——创建XML文档
2015-04-29 10:52 703在前面的2篇文章Android读写XML(上)—— pack ... -
android:configChanges locale 改语言后,该配置不起作用的原因
2015-03-23 14:38 2517@Override public void on ... -
android.app.Fragment$InstantiationException 解决办法
2015-03-23 13:46 1412android.app.Fragment$Instantia ... -
linux 查看内存
2015-02-10 13:08 7461、free监控内存使用情况 #free 2、watc ... -
android fastboot 刷机 指令
2015-01-19 18:31 1531原生bootloader:bootloader-gro ... -
[Android实例] android中进行https连接的方式的详解 (转发)
2015-01-09 15:50 697x 如果不需要验证服务器端证书, ... -
编译android源码apk是否生成odex方法
2014-10-20 17:19 1647其实Android系统默认的配置是,如果没有指定DISABL ... -
关于android源码中的APP编译时引用隐藏的API出现的问题
2014-10-20 15:36 840今天在编译android源码中的计算器APP时发现,竟然无法 ... -
Android系统进程Zygote启动过程的源代码分析
2014-09-17 10:09 504在Android系统中, ... -
Handler和HandlerThread
2014-09-16 16:58 6951.什么是Handler? SDK中关于Handler的说 ...
相关推荐
这个"android2.2中文排序data包"显然与Android 2.2版本中的中文字符排序功能有关,它涉及到Android如何处理中文字符的顺序,这对于构建一个支持多语言的应用或者系统非常重要。在Android中,国际字符集的处理和排序...
"Android2.2简单计算器"是一个很好的入门项目,它可以帮助初学者理解Android应用的基本结构、UI设计以及事件处理等核心概念。下面将详细介绍这个项目的知识点: 1. **Android Studio环境**:首先,你需要安装并熟悉...
Android作为全球最受欢迎的移动操作系统之一,不仅拥有丰富的应用生态,还具备高度的可定制性和开放性。对于想要体验Android系统而无需花费大量资金购买专用设备的用户来说,Android-x86 2.2项目提供了一个在个人...
《Android逆向助手v2.2:探索移动应用的秘密》 在移动互联网时代,Android作为全球最广泛使用的操作系统之一,其应用市场的繁荣催生了众多创新与竞争。然而,随着技术的发展,安全问题日益凸显,开发者们需要面对...
- **源码编译**:详细阐述了如何从源代码编译整个Android系统,这对于深入理解和定制Android系统而言非常重要。 #### 附录 - **擦除NAND Flash**:说明了如何清除NAND Flash中的数据,为重新安装系统或其他操作做...
"Eclipse 4.0和Android Studio 2.2汉化包"是针对这两款流行开发工具的本地化解决方案,旨在帮助中文用户更好地理解和使用这些工具,从而提高开发效率。 Eclipse是一款开源的集成开发环境(IDE),广泛应用于Java...
《Android逆向助手2.2:深入探索APK反编译技术》 在移动应用开发领域,Android系统因其开源特性,吸引着众多开发者和研究者的关注。然而,这种开放性也使得APK(Android应用程序包)的安全性成为了一个重要的议题。...
对于Android 2.2(Froyo)版本的SDK,其源码提供了对操作系统核心功能和API实现的深入了解,这对于开发者提升应用性能、定制系统或进行底层优化具有重要意义。 一、`base`模块 `base`目录包含了Android系统的基石,...
### Android定制培训知识点详解 #### 一、Android的历史与现状 - **历史回顾**: - **起源**:由Andy Rubin等人创立,并于2003年成立Android公司。 - **Google收购**:2005年8月17日,Google收购了Android公司。...
通过熟练掌握Gradle DSL(领域特定语言),你可以定制构建过程,实现自动化测试、代码混淆、版本控制等多种功能。 总之,Gradle 2.2是一个强大的构建工具,为Android Studio项目提供了高效且灵活的构建解决方案。...
Gradle 是一个强大的构建自动化工具,广泛应用于Java、Android和其他多语言项目中。它采用领域特定语言(DSL)——Groovy或Kotlin,为开发者提供了灵活的构建脚本,使得项目构建过程更加高效和可定制化。在Android ...
《Android应用源码解析:深度探索基于2.2(Froyo)的Contacts应用》 在Android操作系统中,Contacts应用是用户管理和存储联系人信息的核心组件。对于开发者来说,深入理解Contacts应用的源码有助于提升对Android系统...
2. **多语言支持**:可以轻松切换不同语言,满足全球化网站的需求。 3. **格式化日期**:允许自定义日期显示格式,如"YYYY-MM-DD"或"MM/DD/YYYY"等。 4. **日期限制**:可设置最小日期和最大日期,防止用户选择...
总的来说,Gradle 2.2是一个可靠的构建工具,尤其适合大型项目或需要高度定制化构建流程的开发环境。尽管现在已经有了更新的版本,但对于那些依赖旧版本功能或者需要向后兼容的项目,Gradle 2.2仍然是一个重要的选择...
9. **[14本经典Android开发教程]-2-Android开发手册—API函数详解.url** - 提供了关于Android应用开发的详细教程,特别是关于Android SDK API的使用,对于想要开发Android应用的开发者来说非常有价值。 这些文件的...
它的设计理念是开放性和可定制性,支持 Java 语言进行应用程序开发。 1. **Android 版本兼容性**: - Android 3.0(Honeycomb)系统是专为手持式平板电脑设计的,不支持手机终端。相反,Android 2.2(Froyo)系统...
**正文** apktool是一款强大的...总的来说,apktool2.2是一个强大且不可或缺的工具,它使开发者能够深入探究Android应用的内部工作,并提供了修改和定制的可能性。不过,使用时应遵守相关法律法规,尊重知识产权。
2.2版本引入了一些新特性,例如Gradle插件升级、更快的构建速度以及对Java 8语言特性的支持,这些都为开发带来了便利。 2. **Google开源串口代码**:Google提供的串口通信库,可能是Android-SerialPort-API或者其他...
Android系统移植技术是一个复杂而精细的过程,涉及到多个层面的工作,包括环境配置、代码编译、设备驱动移植以及系统服务的定制。以下是对标题和描述中所提及知识点的详细解释: 1. **Android系统开发编译环境配置*...
在Android源码中,此目录可能包含了一些为Android平台定制的Java类。 5. **com**: 这是商业组织常用的顶级包名,Android的许多第三方库和应用代码可能位于com下。比如,com.google.android.gms表示Google Play ...