搜档网
当前位置:搜档网 › android中如何修改默认语言和国家

android中如何修改默认语言和国家

android中如何修改默认语言和国家
android中如何修改默认语言和国家

android中如何修改默认语言和国家.

查了很多的网页,上面都只有写要修改PRODUCT_LOCALES字段.

但.MK文件太多的,我找了很久都没有找到这个字段在哪里定义的.

最后发现的结果:

./device/rockchip/sdkdemo/boardconfig.mk中.

这个文件夹在标准的android代码中属于定制文件目录,可以在相应的项目中找到对应的文件夹.修改此项.

修改的方法是将默认的国家放在此字段的第一个位置.一般默认的是英语.

例如韩国:PRODUCT_LOCALES := ko_KR en_US zh_CN

另附转文一篇:

这个讲得详细一些,还包含另一种修改方法,可参考.

转自:

https://www.sodocs.net/doc/d53878929.html,/archives/android-custom-system-language-to-simplified-chinese. html

Android系统原版默认的语言为英文,而我们定制系统可能需要用户一开机就是简体中文。我们可以通过修改系统属性来达到默认语言的作用。

这里有两种方法,需要的可以借鉴下:

1、在init.rc或者在其他的开机初始化文件如:default.prop中加入如下设置系统属性的代码:[https://www.sodocs.net/doc/d53878929.html,nguage]: [zh]

[persist.sys.country]: [CN]

[persist.sys.localevar]: []

[persist.sys.timezone]: [Asia/Shanghai]

[https://www.sodocs.net/doc/d53878929.html,nguage]: [zh]

[ro.product.locale.region]: [CN]

2、编译的时候,通过指明编译参数为简体中文,这样编译传统就会编译出来的系统属性文件,在

系统初始化的时候将会把上面的属性给进行正确的初始化,例如:

make PRODUCT-machineID-eng-zh_CN

其他相关资料:

1、ICU4C简介

ICU4C(ICU for C,https://www.sodocs.net/doc/d53878929.html,/ ) 是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 "https://www.sodocs.net/doc/d53878929.html,nguage=$PRODUCT_DEFAULT_LANGUAGE"

echo "ro.product.locale.region=$PRODUCT_DEFAULT_REGION" 。

因此,要改变默认语言用下面两种方法中的一种就行了:

4.1、在PRODUCT_LOCALES字段里,将要选择的语言放在第一位,如:PRODUCT_LOCALES := en_US zh_CN 默认语言是英语;

4.2、在https://www.sodocs.net/doc/d53878929.html,nguage 和persist.sys.country 里指定语言,如下:

PRODUCT_PROPERTY_OVERRIDES := \

https://www.sodocs.net/doc/d53878929.html,nguage=zh \

persist.sys.country=CN build.prop文件的处理是在system/core/init/property_service.c。

Android usb流程分析

Android usb流程分析 文档以UMS(usb mass storage)为例来分析流程,主要按照图中红线来分析(即从插入USB 开始到状态栏弹框,然后又从选择UMS功能开始往下的流程)。以前没有看过USB相关代码,网上也很少有分析usb FRAMEWORK相关的东西,文档中可能存在错误,如果发现欢迎指正。 总体框图 1.Kernel USB 流程 LINUX KERNEL GADGET 架构 Linux USB Gadget分三层架构,层次关系从上到下 一层:USB Gadget功能层。BSP/Driver开发者通常是要实现这一层,从而实现一个具体的设备驱动,如Anddroid在此层实现了adb,mtp,mass_storage等。浏览参考关注此层代码时,会发现“composite”是此层的关键字,此层中关键的数据结构是:struct usb_composite_driver。这一层的驱动文件一般为:driver/usb/gadget/android.c(android实现的)或driver/usb/gadget/serial.c(传统Linux实现的USB转串口)。 二层:USB设备层(usb core)。这一层是Linux内核开发维护者实现的,与我们没太大关系,不用我们操心,我们只关心其的一些接口就行。浏览参考关注此层时,会发现“gadget”是此层的关键字,此层的关键数据结构是:usb_gadget_driver,usb_composite_dev。这层主要的一个驱动文件为:driver/usb/gadget/composite.c 三层:USB设备控制器驱动层。这一层主要是与CPU、CPU USB控制器有关,与硬件

Android开发入门教程经典解析-JAVA语言

Android入门教程之Java核心技术阶段初级课程,从知识分类来说,可以分为三个部分来说明: (一)基础语法: 讲解Java发展史,Java环境搭建,环境变量配置,Java程序的基本结构,java和javac命令的使用,Notepad++工具的使用,语法格式,变量和常量,二进制转换,运算符、表达式,分支结构和循环结构语句,数组与多维数组,冒泡排序,二分查找,随机生成一组不重复的数算法,通过模拟一个双色球案例,把基础语法容融会贯通,打下扎实的基础。 (二)面向对象: 讲解Java中的OOP/OOD/OOA的知识,深入讲解OOP的封装、继承、多态、抽象的概念与实际应用,涉及内容为类与对象的定义和关系,封装分别在Java EE开发和Android开发中的不同,对象的引用传递,对象的内存分配和GC,构造方法和匿名对象,如何开发和定义一个类,深入讲解String类的原代码原理内部实现、特性和内存管理,通过四种字符串连接时的场景分析来深入理解Java编译期和运行期的区别,String的相关操作方法;static 关键字,构造方法私有化,对象数组与动态数组的实现原理,链表数据结构,内部类及优缺点,在EE开发和Android开发的区别和经验;继承的思想,方法重写与重载,super关键字,抽象类、接口和多态的思想,以及真实环境中的应用,Object类,包装类与特性,包与修饰符;课程贯彻的设计模式有:单例模式、工厂模式、策略模式、适配器模式、模板方法模式、代理模式。以及OO设计中的六大原则。通过本节课程你可以彻底理解什么是面向对象编程,加以时日练习,必成大器。 (三)Eclipse与异常处理 异常的基本处理格式和5大关键字的联合使用,Java中异常处理的新特性,自定义异常类,编译时异常与运行时异常的区别,JVM对异常的处理过程,经过前两节课程共两周多的Notepad++写代码,已经达到了纯手写代码的目的,本节课程开始引入了99.9%的程序员都在使用的集成开发环境Eclipse,他对异常调试的强大支持,会让你叹为观止,当然Eclipse 不仅仅只有这些,在这里,你将一一学到。 Android入门教程之Java核心技术阶段中级课程,Java基础、面向对象、Java高级开发,讲解以下内容: (一)常用类库API与算法 讲解StringBuffer类的内部原理,分析原代码实现,与String的区别与应用经验,如何实现国际化程序,日期操作API,Comparable的两种实现,对象克隆,Arrays工具类、Math 工具类、Random类的使用,选择排序算法和二叉树数据结构实现,通过本节课程,你将学到常用类库API和工作中最最常见的排序算法和二叉树,本节过后,你的功力又增强了。 (二)IO与New IO

基于安卓操作系统的应用软件开发分析.docx

基于安卓操作系统的应用软件开发分析 众所周知,信息技术在其自身的发展过程中,电子产品的丰富性与多样性充分地展现出来,并且使得人们生活方式有所改变,一定程度上为人们日常生产与生活带来了便利。正是因为安卓操作系统自身独特的开放性特征,使其同电子设备实现了有效地沟通,并且始终能够满足用户不同需求。现阶段,安卓手机已经被广泛使用,并且已经普及,在此背景下,使人们开始重视其便携性问题,希望能够时刻进行操作,所以,在安卓操作系统的基础上,应该积极开发出相应的应用软件,这是省前安卓操作系统工作领域中亟待解决的问题。 1.安卓操作系统开发平台在安卓操作系统平台中,其主要的构成部分就是应用软件、中间件以及用户界面和操作系统,给予平台各层分离有力的支撑与保障,使得各层中间都能够保证分工的明确性m。通常情况下,安卓操作系统中的应用程序框架可以有效地提供API,同时还能够合理地设计出其自身特有的功能模块,这样一来,还可以实现为其他应用程序提供有价值的使用依据。在安卓操作系统当中,其最核心的应用程序就是联系人、网络浏览器、日历、SMS应用程序以及电子邮件等等。在编写并设计应用程序的过程中,开发工作人员需要对Java语言进行充分地利用,这样才能够确保系统程序和开发程序所包含的资源实现共享。在此基础上,安卓操作系统还能够向组件提供相应的C/C++库集合,然而,开发工作人员不能够对其进行直接调用’一定要根据上层的应用程序框来实现C/C++库的应用p1。通常情况下,安卓操作系统库的构成内容是媒体库、FreeType、界面管理和SQLite等多种系统。 2.基于安卓操作系统应用软件开发的重要意义随着科技发展与人们生活水平的提升,始终对个人电脑与智能手机在社会经济当中的发展情况产生影响。现阶段,我国智能手机市场始终处于爆炸式增长的趋势,而截至到2013年,智能手机的普及率也迅速上升,将近2/3的国民都已经拥有智能手机pi。然而,国民拥有智能手机的技术水平也处于上升的阶段,其中,智能手机终端CPU处理能力以及存储和用户交互等方面的能力都出现了明显的提高,以上内容也同样是智能手机关键性的指标,所以,一定程度上对于安卓操作系统应用软件的开发工作提供了有力的硬件基础。基于安卓操作系统的应用软件开发能够保证使用者手中安卓智能操作系统同社会各行业经济发展过程中所使用的电子设备实现有效连接,进而能够为使用者提供更具特色与专业化的服务。若安卓智能操作系统应用软件能够得到广泛地应用,必然会为人们的生产与生活带来便利与实用价值,进而更方便人们的工作与生活。 3.安卓操作系统概述 3.1安卓发展史安卓股份有限公司位于美国加州,公司成立于2003年,并在2005年被谷歌所收购。谷歌公司的主要目标就是要创建标准化与开放化的安卓系统移动客户端平台141。同其他智能手机的操作系统相比,安卓操作系统的开放性更加明显,并且能够在其实际运行的过程中始终处于开放状态,同时还能够同其他电子设备实现数据链接,在此基础上,更好地实现高级操作。安卓系统是智能手机当中的一种智能操作系统,所以,其更新的速度相对较快,当前最新版本已经是Android6.0.1(M)操作系统。 3.2安卓开发平台结构与特征(1)应用程序层。智能手机操作系统中的安卓系统,其自身就能够为智能手机的运行提供相应的应用软件,而且,其基本的应用软件都是操作系统本身所配置的,主要的表现形式就是系统应用151。然而,在智能手机实际运行的过程当中,这些应用软件同其他的应用软件共同享受同等资源的支配权利。(2)应用程序框架。在智能手机操作系统当中的安卓操作系统,本身明显的特征就是能够支持使

超强Android系统SD卡分区教程,加速你的Android系统

强烈分享分区软件 Acronis Disk Director Suite 10 通过读卡器给SD卡分三区的方法 Acronis Disk Director Suite 10 中文免注册版 68MB 下载地址: https://www.sodocs.net/doc/d53878929.html,/groups/@g165358/259136.topic 第一步、安装 Acronis Disk Director Suite 10 中文免注册版 第二步、将SD卡插入读卡器,读卡器再插进电脑USB接口 第三步、打开我的电脑,选择SD卡盘符鼠标右键选择格式化(FAT32)不要选择快速格式化 第四步、打开电脑里面的控制面板选择管理工具选择计算机管理 现在看左边,选择储存 -> 磁盘管理 现在看右边,看到你的 SD卡分区没? 鼠标放在你的 SD卡那个分区上,鼠标右键呼出菜单,选择删除磁盘分区,OK 第五步、打开 Acronis Disk Director Suite 10 你现在实际应该选择的分区顺序和大小是: 分第一个分区“FAT32”格式大小选择,你的卡的总容

量 xxxxMB 减 580MB,得出来的就都是FAT32的空间容量 分第二个分区“EXT3”格式大小选择,580MB-96MB(EXT3这个分区,300-499MB都可以,但注意不要超过499MB)一般来说这个分区大小在四百多MB,这个分区分的时候需要注意,这个区分完后剩余的空间大小不能超过96MB,推荐剩余94.13M,留给最后的一个分区就行了 分第三个分区“Linux交换”格式大小嘛,最后的都是它的咯,推荐94.13M 以上分区的时候,你之前划拨的空间与出来以后显示大小,肯定数字上有出入,这个正常,不去管它,你只要确认你分出来以后的大小就行了! 下面的第18步之前,你要确认你分的区是上面说的三个区,且 ETX3格式分区没有超过499MB、Linux交换格式分区没有超过96MB(或者说94.13MB), 1.点选已删除分区的SD卡,创建新的分区

Java作为Android开发语言的原因

Java作为Android开发语言的原因 1 Java语言的影响及谷歌选择的原因 1.1 Java语言的影响 (1)JUnit 在这十年里,JUnit带来了测试驱动开发的普及浪潮。许多其它流行语言的单元测试版本也跟着被创造出来了,例如.NET、C、Python、Perl。 (2)Eclipse 刚进入20世纪,随着Java语言和它的API的成熟,EclipseIDE(集成开发环境)为程序员提供了一个帮助他们提高生产效率和融入到成长中的Java社区的环境。Eclipse也是第一个用SWT UI工具包的大型项目。Eclipse已经逐步向成为一个普及的集成开发环境的目标发展。现在它为集成平台插件提供了丰富的基础平台。 (3)Spring Spring框架在提高Java开发人员的生产效率方面扮演着一个重要的角色。它维持了简单和特点的平衡。Spring为Java开发人员提供了一套服务。这套服务提供了普遍使用的应用功能,例如数据访问和事务管理。作为Sun公司的企业JavaBean系统的竞争者,Spring为Java应用开发创造出了另外一个可选的简单的路径,同时也创造出了一个Java 应用开发思想上的健康竞争。 (4)Solr 多年来,Solr服务器(集成了Lucene搜索引擎)已经为web和企业应用提供了一个简单实用的搜索功能的解决方案。Solr 的特别之处在于它为强力和快速的Lucene搜索库提供了HTTP访问,使它能够成为任何系统的一部分,无论这系统是不是由Java实现。比其它项目好的地方,Solr已经使强力快速的搜索成为现代Web应用的一个可选项。 (5)Hudson and Jenkins 原名为Hudson,现在也叫Jenkins,这个持续集成工具是Java 开发设置的关键部分。Jenkins为软件项目提供了自动构建和测试。随着JUnit的测试持续集成,Jenkins在Java的平台上是敏捷研发成为可能。虽然Hudson和Jenkins现在集成在一起,但并没有偏离Kohsuke Kawaguchi的努力,Kohsuke使它成为世界级的持续集成平台,并提高了大部分Java研发的质量。 (6)Hadoop是著名的MapReduce模型的Java实现。它的强壮使得最大多数的“大数据”系统成为可能。通过降低从巨大的数据中抽取有价值的数据的成本,Hadoop 已经被大量使用,如Facebook用它来做海量数据分析,Yahoo!的个人和广告业务,还有很多其他的公司。 (7)Android Google选择用Java语言作为它十分流行的Android移动操作系统的编程语言。这个选择在整个件研发人员的社区中引起了新的关注。Android程序编译过程比普通Java程序要多经过一个步骤,将JVM二进制码转换成Dalvik二进制码。Google 已经可以利用Eclipse 为软件研发人员提供一个成熟的编写Android应用的开发环境。 1.2谷歌选择Java作为其开发Android的原因 Android支持使用Java作为编程语言来开发应用程序,而Android的Java开发方面从接口到功能,都有层出不穷的变化。考虑到Java虚拟机的效率和资源占用,谷歌重新设计了Android的Java,以便能提高效率和减少资源占用,因而与J2ME等不同。其中Activity等

如何向android的setting语言列表中添加一门语言

如何向android的setting语言列表中添加一门语言(已经解决) 看了下,android2.2系统有越南语的字库,所以支持越南语,但setting中语言列表里没有越南语选项,起初我在LocalePicker.java的onCreate方法的133行做了如下修改: 1.mLocales = new Loc[finalSize+1]; 2.for (int i = 0; i < finalSize ; i++) { 3.mLocales[i] = preprocess[i]; 4.} 5.Locale temp = new Locale("vi", "VN");//vi是越南语 6.mLocales[finalSize] = new Loc(toTitleCase(getDisplayName(temp)), temp); 7.Arrays.sort(mLocales); 复制代码 重新编译后,语言列表里有了越南语,但点击后系统语言还是默认的英文,也就是说系统语言没有更改成功,我再看了下/data/property/目录下关于语言和国家的两个属性文件都是修改成功了的,再继续往下跟代码,但没有所获,google了一下,搜到了一篇关于android2.1 架构解析之语言定制的帖子(https://www.sodocs.net/doc/d53878929.html,/gigatron/blo ... c8ab20843bd0e24445d,有兴趣的朋友可以看下),里面说语言选择列表在external/icu4c/stubdata/Android.mk中配置,我在这里面添加了越南语,最后返回上一级,查看readme.txt,官方已经给出说明,改动后需要将语言配置的txt转成dat,可是在run icu_dat_generator.py 4.2这个命令时一直报错,到现在还没弄好,希望有涉及过这方面的朋友分享下经验,谢谢! 问题已经解决,解决步骤开始写在回复里,现在直接写到该位置吧: 第一种:修改配置文件 位置:build/target/product/languages_full.mk| languages_small.mk,这两个文件里头,有PRODUCT_LOCALES := en_US en_GB fr_FR it_IT es_ES es_US 这样的片段,其实setting中语言选择列表的数据源头就来源于此,既然找到了源头,那只要在之后加上我们想要的语言即可,比如要加越南语只要在后面加上“vi_VN”即可,但细心的同学打开这两个文件比较的时候会发现一个问题: 里面都有PRODUCT_LOCALES :=这样的片段,只是languages_small.mk 的语言要比前者少些,聪明,这就是答案,从命名上也可发现一个full一个small,当我们不需要更多的语言时候,那languages_small.mk里面的语言就可以满足,而且语言少,生成的image所占用的空间也会相对小些,没验证过哈,只是根据同目录下full.mk里的注释“Get a list of languages. We use the small list to save space on smaller devices.”推测的。 好了,接下来,会有一个问题就是在哪个地方去设置full还是small呢?刚提到一个full.mk的文件,这里面有这样的片段:$(call inherit-product, build/target/product/languages_small.mk),后者路径就是我们要设置的地方。好了,改好后,得整个make下,这个得花些时间,好多模块都是重新编译。 第二种:编码方式修改 Android里一个listview会对应一个数据数组,那我们只需在这个数组里按格式添加我们所需要的数据就行了,我们的目标是com.android.settings.LocalePicker.java,在

android vold学习总结

vold学习总结 V old(volume daemon):源码路径android/system/vold,部分引用代码位于android/system/core/libsysutils/src,android/system/core/include/sysutils/下。 它用于管理和控制android平台的外部设备,包括u盘、sd卡等的插入,拔出和格式化等。V old为守护进程,由init进程启动,V old的框架如下图所示: Linux kernel与vold进程通过netlink机制进行跨进程通信,vold中的NetlinkManager 接收来自linux kernel上报的uevent事件,然后将其转换成一个NetlinkEvent类型,并调用V olumeManager类的相应方法进行处理,V olumeManager会将处理的结果发送给MountService,VolumeManager与MountService之间通过CommandListener机制进行通信,本质是通过socket进行跨进程通信,MountService运行在SystemServer进程中。 Uevent事件内容就是一个字符串,linux kernel在下列两种情况下会上报uevent事件: 1.外设状态发生变化触发,当有U盘、sd卡等外设的插拔动作时,都会引起linux kernel 上报uevent事件,如果vold在外设状态发生变化之前已经建立了netlink连接,就能收到相应的uevent事件。 2.在/sys目录下会有一个叫做uevent的文件,往该文件中写入特定的数据,也会触发kernel发送和该设备相关的uevent事件,这个由应用层触发,例如vold启动时,会往uevent 文件中写入数据,它就会触发linux kernel发送uevent事件,这样vold就能获取设备的当前信息。 在etc/目录下有个vold.fstab文件(实际上该文件是在system/etc目录下,它在system/core/rootdir/init.rc中有配置:symlink /system/etc /etc,通过软链接而链接到etc目录下),该文件是android系统与硬件平台交互的接口,用户可以手动配置该文件,在 android\system\core\rootdir\etc\下有个vold.fstab文件,它描述了vold.fstab文件配置挂载设备的模板, dev_mount

Android本质上就是一个基于Linux内核的操作系统

Android本质上就是一个基于Linux内核的操作系统。与Ubuntu Linux、Fedora Linux 类似。只是Android在应用层专门为移动设备添加了一些特有的支持。既然Android是Linux内核的系统,那么基本的启动过程也应符合Linux的规则。如果研究过其他Linux 系统应该了解,一个完整的Linux系统首先会将一个Linux内核装载到内存,也就是编译Linux内核源代码生成的bzImage文件,对于为Android优化的Linux内核源代码会生成zImage文件。该文件就是Linux内核的二进制版本。由于zImage在内核空间运行,而我们平常使用的软件都是在应用空间运行(关于内核空间和应用空间的详细描述,可以参考《Android深度探索(卷1):HAL与驱动开发》一书的内容,在后续的各卷中将会对Android的整体体系进行全方位的剖析)。内核空间和应用空间是不能直接通过内存地址级别访问的,所以就需要建立某种通讯机制。 目前Linux有很多通讯机制可以在用户空间和内核空间之间交互,例如设备驱动文件(位于/dev目录中)、内存文件(/proc、/sys目录等)。了解Linux的同学都应该知道Linux的重要特征之一就是一切都是以文件的形式存在的,例如,一个设备通常与一个或多个设备文件对应。这些与内核空间交互的文件都在用户空间,所以在Linux内核装载完,需要首先建立这些文件所在的目录。而完成这些工作的程序就是本文要介绍的init。Init是一个命令行程序。其主要工作之一就是建立这些与内核空间交互的文件所在的目录。当Linux内核加载完后,要做的第一件事就是调用init程序,也就是说,init是用户空间执行的第一个程序。 在分析init的核心代码之前,还需要初步了解init除了建立一些目录外,还做了如下的工作 1. 初始化属性 2. 处理配置文件的命令(主要是init.rc文件),包括处理各种Action。 3. 性能分析(使用bootchart工具)。 4. 无限循环执行command(启动其他的进程)。 尽管init完成的工作不算很多,不过代码还是非常复杂的。Init程序并不是由一个源代码文件组成的,而是由一组源代码文件的目标文件链接而成的。这些文件位于如下的目录。 /system/core/init 其中init.c是init的主文件,现在打开该文件,看看其中的内容。由于init是命令行程序,所以分析init.c首先应从main函数开始,现在好到main函数,代码如下: int main(int argc, char **argv) { int fd_count = 0; struct pollfd ufds[4]; char *tmpdev; char* debuggable; char tmp[32]; int property_set_fd_init = 0; int signal_fd_init = 0;

安卓原生开发语言及优势分析

时代的发展和进步督促着我们一步步前进,只有不断的创新,企业才能进步发展。我们着眼于未来,积极发掘市场需求,这样,就可以使我们的企业走向长期的成功和繁荣。shenh uax2 AndroidAPP是一种手机应用软件,是使用在安卓手机上或者是Android系统的第三方应用程序。APP的英文Application的简称,通常是指iphone,安卓等手机应用软件,现在的APP多指智能手机的第三方应用程序。 目前国内的Android APP商店众多,新的十大安卓应用市场排名:360手机助手、百度手机助手、应用宝、豌豆荚、小米商店、安卓市场、91市场、淘宝手机助手、安智市场、移动MM市场。 安卓原生开发优势 1、Android是用户量多的移动操作系统 新中国智能手机市场报告, 2015年第一季度中国智能手机出货量同比增长了17%,总计达到1.1亿部。庞大的手机用户量为开发提供了良好的发展前景。 2、Android APP 推广相对容易 相较于苹果手机用户,安卓用户的下载就相对容易非常多,用户不仅可以通过应用商店下载您的应用,同时运营商能够通过二维码推广为用户提供推广途径,吸引更多用户下载。 3、Android 系统开放性高 相对苹果系统的全封闭式,安卓系统的高度开放,给了开发者相当高的开发自由度,您的应用可以更加接近您所想所要的。 4、安卓原生开发开发语言 安卓应用软件开发语言有C语言和其他语言,但是主流的开发语言是Java语言,使接口到功能,都有层出不穷的变化。提高了软件的交互的可能性是Java的特性,可以说安卓手机几乎所有的应用程序都是利用Java语言来进行编写的。使用Java语言开发的软件的程序库、数据库、运行库都是Android手机软件的一大特点。Java语言自身的优点也有很多,所以安卓应用软件的开发应用到了Java的核心类的知识量,这也让使用Java语言开发的安卓软件具备优势。 1、Java语言是发展快的程序语言,具有面向对象的特点,比较通俗易懂; 2、Java语言的显著特点就是简单,继承了C++语言的先进精华,是计算机程序语言发展的一大进步; 3、Java语言拥有独立的体系结构,可以不受限制,随意在任何系统当中运行,所以体系结构的中立决定了Java语言可以在不同的计算机结构中得以运行。使用Java语言开发的不同程序在不同结构的计算机显示的语言位数却是统一的。

(完整word版)按键精灵Android版MQ语言基础说明

按键精灵Android版:MQ 语言 MQ是按键精灵针对旗下移动产品而设计的全新脚本开发语言。语言支持全中文阅读脚本,上手简单,易学易用。MQ语言的基本特性如下: 1 数据类型 在MQ语言里,数据类型包括如下5种: Null : 不包含任何有效数据; Boolean:仅包含True和False两个常数; Integer:32位有符号整数,范围为-2,147,483,648 到2,147,483,647 之间; Float:双精度浮点数,负数范围从-1.79769313486232E308 到 -4.94065645841247E-324,正数范围从4.94065645841247E-324 到 1.79769313486232E308; String : 字符串。 MQ语言为动态类型,即定义变量时并不指定类型,在给变量赋值时才确定类型,并且类型随时可以通过赋值操作而变化。 常量 MQ语言中,用户可直接在脚本内写入没有命名的常量的,具体类型与写法如下: 整数型:可直接输出整数数字,如100;亦可加&H前缀,表明该常量为16进制数字,如&H64。浮点型:可直接输出小数点数字,如3.1415;亦可采用E分隔整数和底数部分,如314.15e-2。字符串型:凡采用一对双引号包含的内容均被视为字符串型常量。其中允许使用转义字符包括有:'\b' (退格),'\f' (表单),'\n' (换行),'\r' (回车),'\t' (横向制表),'\v' (纵向制表),'\\' (反斜杠),'\" '(双引号),以及'\' '(单引号)。另外也支持反斜杠

加数字来描述一个字符。(注意,如果需要在这种描述方法后接一个是数字的字符,那么反斜杠后必须写满三个数字)。 MQ语言中有一下已经预先定义好的常量,目标包括True和False(不区分大小写),今后还会增加。 变量 MQ语言的命名方式如下: 变量名不区分大小写,同时关键字(如If、Dim)与子程序的名字也无须区分大小写。 变量名、关键字及子程序的命名同时支持中文及英文,除了第一个字母外,后续内容还可以用数字。 变量在使用前必须用Dim语句定义,但Dim语句不必指定类型。声明多个变量时,使用逗号分隔变量。例如:Dim Top, Bottom, Left, Right, 上, 下, 左2, 右1。 变量的作用域由声明它的位置决定。如果在子程序中声明变量,则只有该子程序中的代码可以访问或更改变量值,此时变量具有局部作用域并被称为局部变量。如果在子程序之外声明变量,则该变量可以被当前脚本的所有子程序所识别,称为全局变量。 变量还可以定义为数组的形式,数组可以是一维的,也可以是多维的,数组的每个维度的索引都是从0开始的正整数,当定义一维数组时,可以指定数组的初始元素个数,也可以不指定。如:Dim Array() Dim Array(10) 上述例子都可以定义一个一维数组。但即使指定了数组的初始元素个数,以后也可以随时增加新的元素(直接访问新的元素即可)。当定义多维数组的时候,则必须指定数组在每个维度的初始元素个数,各个维度的初始元素个数之间用逗号分隔,如:

android休眠与唤醒驱动流程分析

android休眠与唤醒驱动流程分析 标准linux休眠过程: ●power management notifiers are executed with PM_SUSPEND_PREPARE ●tasks are frozen ●target system sleep state is announced to the platform-handling code ●devices are suspended ●platform-specific global suspend preparation methods are executed ●non-boot CPUs are taken off-line ●interrupts are disabled on the remaining (main) CPU ●late suspend of devices is carried out (一般有一些BUS driver的动作进行)? ●platform-specific global methods are invoked to put the system to sleep 标准linux唤醒过程: ●t he main CPU is switched to the appropriate mode, if necessary ●early resume of devices is carried out (一般有一些BUS driver的动作进行)? ●interrupts are enabled on the main CPU ●non-boot CPUs are enabled ●platform-specific global resume preparation methods are invoked ●devices are woken up ●tasks are thawed ●power management notifiers are executed with PM_POST_SUSPEND 用户可以通过sys文件系统控制系统进入休眠: 查看系统支持的休眠方式: #cat /sys/power/state 常见有standby(suspend to RAM)、mem(suspend to RAM)和disk(suspend to disk),只是standby耗电更多,返回到正常工作状态的时间更短。 通过#echo mem > /sys/power/state 让系统进入休眠。 Android休眠与唤醒 android是在传统的linux内核电源管理设计的基础上,结合手机设计的实际需求而进化出的一套电源管理系统,其核心内容有:wakelock 、early_suspend与late_resume。 wakelock在Android的电源管理系统中扮演一个核心的角色。wakelock是一种锁的机制,只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得。这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁。如果没有锁了或者超时了,内核就会启动休眠的那套机制来进入休眠。 当系统在启动完毕后,会自己去加一把名为“main“的锁,而当系统有意愿去睡眠时则会先去释放这把“main”锁,在android中,在early_suspend的最后一步会去释放“main”锁(wake_unlock: main)。释放完后则会去检查是否还有其他存在的锁,如果没有则直接进入睡眠过程。 它的缺点是,如果有某一应用获锁而不释放或者因一直在执行某种操作而没时间来释放的话,则会导致系统一直进入不了睡眠状态,功耗过大。 early_suspend:先与linux内核的睡眠过程被调用。一般在手机系统的设计中对背光的操

android的多国语言适配

android多国语言文件夹 android多国语言文件夹文件汇总如下:(有些语言的书写顺序可能跟中文是相反的)中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-en-rUS 英语(英国):values-en-rGB 英文(澳大利亚):values-en-rAU 英文(加拿大):values-en-rCA 英文(爱尔兰):values-en-rIE 英文(印度):values-en-rIN 英文(新西兰):values-en-rNZ 英文(新加坡):values-en-rSG 英文(南非):values-en-rZA 阿拉伯文(埃及):values-ar-rEG 阿拉伯文(以色列):values-ar-rIL 保加利亚文: values-bg-rBG 加泰罗尼亚文:values-ca-rES 捷克文:values-cs-rCZ 丹麦文:values-da-rDK 德文(奥地利):values-de-rAT 德文(瑞士):values-de-rCH 德文(德国):values-de-rDE 德文(列支敦士登):values-de-rLI 希腊文:values-el-rGR 西班牙文(西班牙):values-es-rES 西班牙文(美国):values-es-rUS

芬兰文(芬兰):values-fi-rFI 法文(比利时):values-fr-rBE 法文(加拿大):values-fr-rCA 法文(瑞士):values-fr-rCH 法文(法国):values-fr-rFR 希伯来文:values-iw-rIL 印地文:values-hi-rIN 克罗里亚文:values-hr-rHR 匈牙利文:values-hu-rHU 印度尼西亚文:values-in-rID 意大利文(瑞士):values-it-rCH 意大利文(意大利):values-it-rIT 日文:values-ja-rJP 韩文:values-ko-rKR 立陶宛文:valueslt-rLT 拉脱维亚文:values-lv-rLV 挪威博克马尔文:values-nb-rNO 荷兰文(比利时):values-nl-BE 荷兰文(荷兰):values-nl-rNL 波兰文:values-pl-rPL 葡萄牙文(巴西):values-pt-rBR 葡萄牙文(葡萄牙):values-pt-rPT 罗马尼亚文:values-ro-rRO 俄文:values-ru-rRU 斯洛伐克文:values-sk-rSK 斯洛文尼亚文:values-sl-rSI

Android系统的开机画面显示过程分析

Android系统的开机画面显示过程分析 分类:Android2012-07-0900:561252人阅读评论(39)收藏举报 好几个月都没有更新过博客了,从今天开始,老罗将尝试对Android系统的UI实现作一个系统的分析,也算是落实之前所作出的承诺。提到Android系统的UI,我们最先接触到的便是系统在启动过程中所出现的画面了。Android系统在启动的过程中,最多可以出现三个画面,每一个画面都用来描述一个不同的启动阶段。本文将详细分析这三个开机画面的显示过程,以便可以开启我们对Android系统UI实现的分析之路。 第一个开机画面是在内核启动的过程中出现的,它是一个静态的画面。第二个开机画面是在init进程启动的过程中出现的,它也是一个静态的画面。第三个开机画面是在系统服务启动的过程中出现的,它是一个动态的画面。无论是哪一个画面,它们都是在一个称为帧缓冲区(frame buffer,简称fb)的硬件设备上进行渲染的。接下来,我们就分别分析这三个画面是如何在fb上显示的。 1.第一个开机画面的显示过程 Android系统的第一个开机画面其实是Linux内核的启动画面。在默认情况下,这个画面是不会出现的,除非我们在编译内核的时候,启用以下两个编译选项: CONFIG_FRAMEBUFFER_CONSOLE CONFIG_LOGO 第一个编译选项表示内核支持帧缓冲区控制台,它对应的配置菜单项为:Device Drivers--->Graphics support--->Console display driver support--->Framebuffer Console support。第二个编译选项表示内核在启动的过程中,需要显示LOGO,它对应的配置菜单项为:Device Drivers--->Graphics support--->Bootup logo。配置Android 内核编译选项可以参考在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)一文。 帧缓冲区硬件设备在内核中有一个对应的驱动程序模块fbmem,它实现在文件kernel/goldfish/drivers/video/fbmem.c中,它的初始化函数如下所示: 1/**

【IT专家】初次是使用AndroidStudio用Kotlin语言新建Android项目

本文由我司收集整编,推荐下载,如有疑问,请与我司联系初次是使用AndroidStudio用Kotlin语言新建Android项目2017/07/08 506 1.首先我们得有AndroidStudio编译工具如果没有,可以在官网下载:https://developer.android.google/studio/index.html ?2.AndroidStudio中要有Kotlin插件如图: 如果还有不会下在插件的同学们请查看我前面的博客:Android Studio安装插件– blog.csdn/male09/article/details/68952350 或者还想了解更多的插件请查看我的:Android Studio插件整理– blog.csdn/male09/article/details/68952466 3.有了插件我们就得把我的的Activity转换成Kotlin 如图: 4.配置Kotlin: 自动配置有这几个方法: a.如果是第一次工具会提示你是否需要配置如图: 你可以点击配置: b.双击Shift配置Kotlin: 手动配置Kkotlin: a.在工程的build.gradle中配置 1.ext.kotlin_version = ‘你的kotlin配置版本’2.classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” ?//你通过kotlin直接赋值到xml文件中要配置一下 3. classpath “org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version” 下面是我的所有配置仅供参考: ?// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript { ext.kotlin_version = ‘1.1.3-2’ repositories { jcenter() } dependencies { classpath ‘com.android.tools.build:gradle:2.3.3’ classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version” classpath “org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version” // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }}allprojects { repositories { jcenter() }}task clean(type: Delete) { delete rootProject.buildDir} b.在工程的build.gradle中配置 1.apply plugin: ‘kotlin-android’ 2.apply plugin: ‘kotlin-android-extensions’3pile “org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version” 下面的代码仅供参考: ?apply plugin: ‘com.android.application’apply plugin: ‘kotlin-android’apply plugin:

改变Android手机软件安装位置的解决办法(精)

改变 Android 手机软件安装位置的解决办法 谷歌 Android 系统手机默认只能把软件安装在手机内存里,使本来就不大的手机内存显得捉襟见肘。如果你也是个手机软件狂人,喜欢尝试各种各样新奇有趣的软件,面对越来越少的手机内存空间,不得不对已经安装的软件痛下 **。你是否还在安装与卸载之间纠结? Follow Me!我们一起来给 Android 系统扩扩容,让“ 机器人” 也可以“ 大肚能容” ,免去存储空间不足的后顾之忧。 Tips :存储器分为随机存储器(RAM 和只读存储器(ROM 两种。手机 ROM 相当于 PC 上的硬盘, 用于存储手机操作系统和软件, 也叫 FLASH ROM, 决定手机存储空间的大小。手机 RAM 相当于 PC 的内存,其大小决定手机的运行速度。 要把大象装冰箱里总共分三步, 而 Android 系统中把软件安装到 SD 卡上, 比这还简单, 两步就够了: 一、存储卡分区 首先我们需要对手机 SD 卡进行分区, 分一个 FAT32分区和一个 Ext3分区, FAT32分区用于正常存储图片、音乐、视频等资料,而 Linux 格式的 Ext3分区就是用于扩容安装软件的分区。以笔者的 2G SD卡为例, FAT32分区 1.35GB , Ext3分区 494MB 。下载并安装 Acronis Disk Director Suite 软件。将手机 SD 卡装入读卡器并连接电脑,然后运行 Acronis Disk Director Suite软件。 1.FAT32分区。找到代表 SD 卡的磁盘分区,点击右键,选择“ 删除” 命令,删除已有分区。当成为“ 未分配” 分区时,点击右键,选择“ 创建分区” ,在弹出的对话框中,文件系统选择: FAT32,创建为“ 主分区” ,设置好分区大小 1.35GB ,点击确定按钮。 2. Ext3分区。在剩余的 494MB 分区上,点击右键,选择“ 创建分区” ,在弹出的对话框中, 文件系统选择:Ext3,创建为“ 主分区” ,设置好分区大小 494MB ,点击确定按钮。

相关主题