安卓源码下载 求安卓2.3源代码
你是否曾想过,安卓源码下载和求安卓2.3源代码之间是否存在联系?在本文中,小编将为您探索它们之间的关系,带您领略新的视角和见解。
跪求安卓2.3的源代码麻烦百度网盘共享一下谢谢!
自己从官方网上下载吧。不仅包括2.3,还包括1.5~2.3的所有版本~
详细操作方法如下:
最近网站可能在维修,你稍微等几天再试试~
第一步:安装repo
$ mkdir~/bin
$ PATH=~/bin:$PATH
$ curl https://android.git.kernel.org/repo>~/bin/repo
$ chmod a+x~/bin/repo
第二步:下载代码
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
$ repo init-u git://android.git.kernel.org/platform/manifest.git
$ repo init-u git://android.git.kernel.org/platform/manifest.git-b gingerbread
(这里gingerbread就是2.3版本,当然你替换为其他分之名称,从而下载froyo之类的版本,方法类似的)
以后,如果想更新代码,可以使用下面的命令:
$ repo sync
自己可以编译安卓源码吗
用最新的Ubuntu 16.04,请首先确保自己已经安装了Git.没安装的同学可以通过以下命令进行安装:
sudo apt-get install git git config–global user.email“test@test.com” git config–global user.name“test”
其中test@test.com为你自己的邮箱.
简要说明
android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述.
源码下载
由于某墙的原因,这里我们采用国内的镜像源进行下载.
目前,可用的镜像源一般是科大和清华的,具体使用差不多,这里我选择清华大学镜像进行说明.(参考:科大源,清华源)
repo工具下载及安装
通过执行以下命令实现repo工具的下载和安装
mkdir~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo>~/bin/repochmod a+x~/bin/repo
补充说明
这里,我来简单的介绍下repo工具,我们知道AOSP项目由不同的子项目组成,为了方便进行管理,Google采用Git对AOSP项目进行多仓库管理.在聊repo工具之前,我先带你来聊聊多仓库项目:
我们有个非常庞大的项目Pre,该项目由很多个子项目R1,R2,...Rn等组成,为了方便管理和协同开发,我们为每个子项目创立自己的仓库,整个项目的结构如下:
这里写图片描述
将一个项目Pre进行分库后会遇到这么一个问题:如果我们想要创建Pre分支来做feature开发,这就意味着,我们需要到每个子项目中分别创建对应的分支,这个过程如果纯粹靠手工做,那简直是个灾难,利索当然我们会想写个自动化处理程序(我们假设这个工具叫做RepoUtil)来帮助我们解决这个问题.这个RepoUtil也会有版本管理之类的需求,因此我们也用Git对其管理,并为其创建对应的仓库.此时整个项目的结构如下:
这里写图片描述
这里RepoUtil知道整个项目Pre下的每个子项目(即维护子项目的列表),同时需要提供对这些子项目的管理功能,比如统一创建分支等.但是从"单一职责"角度来看,RepoUitl这个工具的功能过于复杂,我们完全可以将维护子项目列表这个功能抽取出来作为一个新项目sub_projects,因为子项目也会变化,因此,为其创建对应的仓库,并用Git管理,这样的化,RepoUtil只需要通过简单的对ub_projects进行依赖即可,此时整个项目的结构如下:
这里写图片描述
AOSP项目结构和我上文的描述非常类似.repo工具对应RepoUtil,mainfest对应sub_projects.
总结一下:repo就是这么一种工具,由一系列python脚本组成,通过调用Git命令实现对AOSP项目的管理.
建立源码文件夹
熟悉Git的同学都应该知道,我们需要为项目在本地创建对应的仓库.同样,这里为了方便对代码进行管理,我们为其创建一个文件夹.这里我在当前用户目录下创建了source文件夹,后面所有的下载的源码和编译出的产物也都放在这里,命令如下:
mkdir sourcecd source
初始化仓库
我们将上面的source文件夹作为仓库,现在需要来初始化这个仓库了.通过执行初始化仓库命令可以获取AOSP项目master上最新的代码并初始化该仓库,命令如下:
repo init-u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
或者使用:
repo init-u git://aosp.tuna.tsinghua.edu.cn/aosp/platform/manifest
两者实现的效果一致,仅仅只是协议不同.
如果执行该命令的过程中,如果提示无法连接到 gerrit.googlesource.com,那么我们只需要编辑~/bin/repo文件,找到REPO_URL这一行,然后将其内容修改为:
REPO_URL='https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
然后重新执行上述命令即可.
补充说明
不带参数的manifest命令用于获取master上最新的代码,但是可以通过-b参数指定获取某个特定的android版本,比如我们想要获取android-4.0.1_r1分支,那么命令如下:
repo init-u https://aosp.tuna.tsinghua.edu.cn/platform/manifest-b android-4.0.1_r1
(AOSP项目当前所有的分支列表参看:分支列表)
同步源码到本地
初始化仓库之后,就可以开始正式同步代码到本地了,命令如下:
repo sync
以后如果需要同步最新的远程代码到本地,也只需要执行该命令即可.在同步过程中,如果因为网络原因中断,使用该命令继续同步即可.不出意外,5个小时便可以将全部源码同步到本地.所以呢,这个过程可以放在晚上睡觉期间完成.
(提示:一定要确定代码完全同步了,不然在下面编译过程出现的错误会让你痛不欲生,不确定的童鞋可以多用repo sync同步几次)
构建编译环境
源码下载完成后,就可以构建编译环境了.在开始之前,我们先来看看一些编译要求:
1.硬件要求:
64位的操作系统只能编译2.3.x以上的版本,如果你想要编译2.3.x以下的,那么需要32位的操作系统.
磁盘空间越多越好,至少在100GB以上.意思就是,你可以去买个大点的硬盘了啊
如果你想要在是在虚拟机运行linux,那么至少需要16GB的RAM/swap.
(实际上,我非常不推荐在虚拟机中编译2.3.x以上的代码.)
2.软件要求:
1.操作系统要求
在AOSP开源中,主分支使用Ubuntu长期版本开发和测试的,因此也建议你使用Ubuntu进行编译,下面我们列出不同版本的的Ubuntu能够编译那些android版本:
Android版本
编译要求的Ubuntu最低版本
Android 6.0至AOSP master Ubuntu 14.04
Android 2.3.x至Android 5.x Ubuntu 12.04
Android 1.5至Android 2.2.x Ubuntu 10.04
2. JDK版本要求
除了操作系统版本这个问题外,我们还需要关注JDK版本问题,为了方便,同样我们也列出的不同Android版本的源码需要用到的JDK版本:
Android版本
编译要求的JDK版本
AOSP的Android主线 OpenJDK 8
Android 5.x至android 6.0 OpenJDK 7
Android 2.3.x至Android 4.4.x Oracle JDK 6
Android 1.5至Android 2.2.x Oracle JDK 5
更具体的可以参看:Google源码编译要求
我现在在Ubuntu 16.04下编译AOSP主线代码,因此需要安装OpenJDK 8,执行命令如下:
sudo apt-get install openjdk-8-jdk
如果你需要在Ubuntu 14.04下编译AOSP主线代码,同样需要安装OpenJDK 8,此时需要执行如下命令:
sudo apt-get updatesudo apt-get install openjdk-8-jdk
如果你要编译的是Android 5.x到android 6.0之间的系统版本,需要采用openjdk7.但是在Ubuntu 15.04及之后的版本的在线安装库中只支持openjdk8和openjdk9的安装.因此,如果你想要安装openjdk 7需要首先设置ppa:
sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update
然后再执行安装命令:
sudo apt-get install openjdk-7-jdk
有时候,我们需要编译不同版本的android系统,就可能使用不同的jdk版本.关于jdk版本切换,可以使用如下命令:
sudo update-alternative--config javasudo update-alternative--config javac
3.其他要求
Google官方构建编译环境指南中已经说明了Ubuntu14.04,Ubuntu 12.04,Ubuntu 10.04需要添加的依赖,这里我们就不做介绍了.我原先以为,Ubuntu16.04的设置和Ubuntu14.04的依赖设置应该差不多,但是只能说too young too simple.
下面是Ubuntu16.04中的依赖设置:
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib sudo apt-get install-y git flex bison gperf build-essential libncurses5-dev:i386 sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-devsudo apt-get install git-core gnupg flex bison gperf build-essential sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib sudo apt-get install libc6-dev-i386 sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4sudo apt-get install lib32z-dev ccache
(其中几个命令中参数是重复的,但不妨碍我们)
初始化编译环境
确保上述过程完成后,接下来我们需要初始化编译环境,命令如下:
source build/envsetup.sh
执行该命令结果如下:
这里写图片描述
不难发现该命令只是引入了其他执行脚本,至于这些脚本做什么,目前不在本文中细说.
该命令执行成功后,我们会得到了一些有用的命令,比如最下面要用到的lunch命令.
编译源码
初始化编译环境之后,就进入源码编译阶段.这个阶段又包括两个阶段:选择编译目标和执行编译.
选择编译目标
通过lunch指令设置编译目标,所谓的编译目标就是生成的镜像要运行在什么样的设备上.这里我们设置的编译目标是aosp_arm64-eng,因此执行指令:
lunch aosp_arm64-eng
编译目标格式说明
编译目标的格式:BUILD-BUILDTYPE,比如上面的aosp_arm-eng的BUILD是aosp_arm,BUILDTYPE是eng.
什么是BUILD
BUILD指的是特定功能的组合的特定名称,即表示编译出的镜像可以运行在什么环境.其中,aosp(Android Open Source Project)代表Android开源项目;arm表示系统是运行在arm架构的处理器上,arm64则是指64位arm架构;处理器,x86则表示x86架构的处理器;此外,还有一些单词代表了特定的Nexus设备,下面是常用的设备代码和编译目标,更多参考官方文档
|受型号|设备代码|编译目标|
|---|----|---|
|Nexus 6P|angler|aosp_angler-userdebug|
|Nexus 5X|bullhead|aosp_bullhead-userdebug|
|Nexus 6|shamu|aosp_shamu-userdebug|
|Nexus 5|hammerhead|aosp_hammerhead-userdebug|
提示:如果你没有Nexus设备,那么通常选择arm或者x86即可
什么是BUILDTYPE
BUILD TYPE则指的是编译类型,通常有三种:
-user:代表这是编译出的系统镜像是可以用来正式发布到市场的版本,其权限是被限制的(如,没有root权限,不鞥年dedug等)
-userdebug:在user版本的基础上开放了root权限和debug权限.
-eng:代表engineer,也就是所谓的开发工程师的版本,拥有最大的权限(root等),此外还附带了许多debug工具
了解编译目标的组成之后,我们就可以根据自己目前的情况选择了.那不知道编译目标怎么办?
我们只需要执行不带参数的lunch指令,稍后,控制台会列出所有的编译目标,如下:
这里写图片描述
接着我们只需要输入相应的数字即可.
来举个例子:你没有Nexus设备,只想编译完后运行看看,那么就可以选择aosp_arm-eng.
(我在ubuntu 16.04(64位)中编译完成后启动虚拟机时,卡在黑屏,尝试编译aosp_arm64-eng解决.因此,这里我使用了aosp_arm64-eng)
开始编译
通过make指令进行代码编译,该指令通过-j参数来设置参与编译的线程数量,以提高编译速度.比如这里我们设置8个线程同时编译:
make-j8
需要注意的是,参与编译的线程并不是越多越好,通常是根据你机器cup的核心来确定:core*2,即当前cpu的核心的2倍.比如,我现在的笔记本是双核四线程的,因此根据公式,最快速的编译可以make-j8.
(通过cat/proc/cpuinfo查看相关cpu信息)
如果一切顺利的化,在几个小时之后,便可以编译完成.看到### make completed successfully(01:18:45(hh:mm:ss))###表示你编译成功了.
运行模拟器
在编译完成之后,就可以通过以下命令运行Android虚拟机了,命令如下:
source build/envsetup.shlunch(选择刚才你设置的目标版本,比如这里了我选择的是2)emulator
如果你是在编译完后立刻运行虚拟机,由于我们之前已经执行过source及lunch命令了,因此现在你只需要执行命令就可以运行虚拟机:
emulator
不出意外,在等待一会之后,你会看到运行界面:
这里写图片描述
补充
既然谈到了模拟器运行,这里我们顺便介绍模拟器运行所需要四个文件:
Linux Kernel
system.img
userdate.img
ramdisk.img
如果你在使用lunch命令时选择的是aosp_arm-eng,那么在执行不带参数的emualtor命令时,Linux Kernel默认使用的是/source/prebuilds/qemu-kernel/arm/kernel-qemu目录下的kernel-qemu文件;而android镜像文件则是默认使用source/out/target/product/generic目录下的system.img,userdata.img和ramdisk.img,也就是我们刚刚编译出来的镜像文件.
上面我在使用lunch命令时选择的是aosp_arm64-eng,因此linux默认使用的/source/prebuilds/qemu-kernel/arm64/kernel-qemu下的kernel-qemu,而其他文件则是使用的source/out/target/product/generic64目录下的system.img,userdata.img和ramdisk.img.
当然,emulator指令允许你通过参数制定使用不同的文件,具体用法可以通过emulator--help查看
模块编译
除了通过make命令编译可以整个android源码外,Google也为我们提供了相应的命令来支持单独模块的编译.
编译环境初始化(即执行source build/envsetup.sh)之后,我们可以得到一些有用的指令,除了上边用到的lunch,还有以下:
- croot: Changes directory to the top of the tree.- m: Makes from the top of the tree.- mm: Builds all of the modules in the current directory.- mmm: Builds all of the modules in the supplied directories.- cgrep: Greps on all local C/C++ files.- jgrep: Greps on all local Java files.- resgrep: Greps on all local res/*.xml files.- godir: Go to the directory containing a file.其中mmm指令就是用来编译指定目录.通常来说,每个目录只包含一个模块.比如这里我们要编译Launcher2模块,执行指令:
mmm packages/apps/Launcher2/稍等一会之后,如果提示:
### make completed success fully###
即表示编译完成,此时在out/target/product/gereric/system/app就可以看到编译的Launcher2.apk文件了.
重新打包系统镜像
编译好指定模块后,如果我们想要将该模块对应的apk集成到系统镜像中,需要借助make snod指令重新打包系统镜像,这样我们新生成的system.img中就包含了刚才编译的Launcher2模块了.重启模拟器之后生效.
单独安装模块
我们在不断的修改某些模块,总不能每次编译完成后都要重新打包system.img,然后重启手机吧?有没有什么简单的方法呢?
在编译完后,借助adb install命令直接将生成的apk文件安装到设备上即可,相比使用make snod,会节省很多事件.
补充
我们简单的来介绍out/target/product/generic/system目录下的常用目录:
Android系统自带的apk文件都在out/target/product/generic/system/apk目录下;
一些可执行文件(比如C编译的执行),放在out/target/product/generic/system/bin目录下;
动态链接库放在out/target/product/generic/system/lib目录下;
硬件抽象层文件都放在out/targer/product/generic/system/lib/hw目录下.
SDK编译
如果你需要自己编译SDK使用,很简单,只需要执行命令make sdk即可.
错误集合
在编译过程中,遇到的大部分错误都可以在google搜到解决方案.这里只列举几个常见的错误:
错误一: You are attemping to build with the incorrect version.具体错误如下:
请点击输入图片描述
这里写图片描述
如果你认真看了构建环境的的要求,那么这个错误是可以避免的.当然,这个问题也很容易解决:安装openjdk 8,别忘了使用sudo update-alternative命令切换jdk版本.
错误二: Out of memory error.具体错误如下:
请点击输入图片描述
这里写图片描述
这个错误比较常见,尤其是在编译AOSP主线代码时,常常会因为JVM heap size太小而导致该错误.
此时有两种解决方法:
方法一:
在编译命令之前,修改prebuilts/sdk/tools/jack-admin文件,找到文件中的这一行:
JACK_SERVER_COMMAND="java-Djava.io.tmpdir=$TMPDIR$JACK_SERVER_VM_ARGUMENTS-cp$LAUNCHER_JAR$LAUNCHER_NAME"
然后在该行添加-Xmx4096m,如:
JACK_SERVER_COMMAND="java-Djava.io.tmpdir=$TMPDIR$JACK_SERVER_VM_ARGUMENTS-Xmx4096m-cp$LAUNCHER_JAR$LAUNCHER_NAME"
然后再执行time make-8j
方法二:
在控制台执行以下命令:
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8-XX:+TieredCompilation-Xmx4096m"out/host/linux-x86/bin/jack-admin kill-serverout/host/linux-x86/bin/jack-admin start-server如图:
请点击输入图片描述
这里写图片描述
执行完该命令后,再使用make命令继续编译.某些情况下,当你执行jack-admin kill-server时可能提示你命令不存在,此时去你去out/host/linux-x86/bin/目录下会发现不存在jack-admin文件.如果我是你,我就会重新repo sync下,然后从头来过.
错误三:使用emulator时,虚拟机停在黑屏界面,点击无任何响应.此时,可能是kerner内核问题,解决方法如下:
执行如下命令:
./out/host/linux-x86/bin/emulator-partition-size 1024-kernel./prebuilts/qemu-kernel/arm/kernel-qemu-armv7通过使用kernel-qemu-armv7内核解决模拟器等待黑屏问题.而-partition-size 1024则是解决警告: system partion siez adjusted to match image file(163 MB>66 MB)
如果你一开始编译的版本是aosp_arm-eng,使用上述命令仍然不能解决等待黑屏问题时,不妨编译aosp_arm64-eng试试.
结束吧
到现在为止,你已经了解了整个android编译的流程.除此之外,我也简单的说明android源码的多仓库管理机制.下面,不妨自己动手尝试一下.
求安卓2.3源代码
一般来说,由开源社区开发并发行的开源软件,即我们称之为“开源项目(Open Source Program)”的开源软件,一般都是“免费开源软件”;而由企业(发行商,Enterprise or Distributor)进行二次开发并发行的开源软件,即我们称之为“开源产品(Open Source Program)”的开源软件,一般是“付费开源软件”。
必须指出,开源社区开发和发行的开源软件,首先要体现自由/开源软件的价值观:开放、共享、协同、自由、无偿、选择;所谓开源软件是“利他主义”(或“共产主义”,Altruism or Communism)与“利己主义”(或“资本主义”,Capitalism)矛盾的对立和统一(或平衡),即体现自由开源软件价值观与配置商业服务模式的平衡;企业开发和发行的开源软件,是在继承社区开发和发行的开源软件(价值观、开放源代码、开源许可协议)的基础上,进行再开发(二次开发),并采取相应的商业模式;商业模式是开源软件得以持续发展,实行规模化、产业化的必要条件,开源软件的商业模式是一种以服务为主要内容、实施低价销售战略的模式。
开源软件商业版是基于社区版发展起来的,开源软件商业版与社区版的关系,在实践中可以归纳为如下各种主要类型:
1,双授权模式
如MySQL。MySQL(社区版)执行自由/开源软件许可协议(GPLv3),其源代码开放,人们可从网上免费下载;MySQL(商业版)是基于MySQL(社区版)再开发的,软件授权模式发生了变化,MySQL(商业版)是要收费的,或通过提供服务来收费。
又如Apache。Apache(社区、基金会)是一个非盈利性组织,Apache软件基金会只向社会提供开源版本(可在网上免费下载),有一些企业如“春之源(Spring Source)”提供支持Apache服务或商业版本,但Apache基金会规定这些企业不能随意使用Apache商标。如果某互联网网站下载Apache软件,安装到服务器(硬件)中,以建立网络/应用服务器系统时,Apache基金会允许他们称为Apache网络/应用服务器,并在其网站上对外提及“Powered by Apache”。
还有如SugarCRM,也采用双授权模式,其开放的软件(占80%)不收费,不开放的软件(占20%)要收费;另外,如Open Office.org与Star Office的关系,也可归纳为双授权模式。
2,对开源软件社区版进行工程化、产品化处理(二次开发)
如各种版本的Linux操作系统(产品)。一般由Linux发行商基于Linux(社区版),进行后续的工程化处理或再开发,完成或发布Linux(商业版或产品版);二次开发的工程化技术包含:①优化内核,发行商发布的内核源代码为Linux社区发布的“主干(Official)源代码”,允许与其实际执行而不公布的源代码(即发行商的“分支源代码”)有3-5%的偏差(这是通过测试和经验来获得的),②兼容性测试和质量认证,③对各种软件模块(在内核中约有1500个左右软件模块)的不同组合或配置(以提高效率),④回归移植或降级处理(Bug Fix,Patch, back porting),⑤专用工具和插件,⑥本地化需求功能。社区开发的开源软件(开源项目)是原创性技术,企业后续开发并完成的开源软件(开源产品),是开源技术的成熟化过程或产品化过程(二次开发以促使开源软件趋于稳定、优质、高效、成熟)。企业发行的Linux操作系统软件(产品),继承并开放由社区开发的源代码,但企业开发的工程化技术是不开放的,含有自主创新因素和自主知识产权,这时Linux操作系统作为成型产品的整体软件是要收费的,或通过服务来收费。
Red Hat的一位开源专家曾说:Red Hat Linux有两种版本,一种是针对“1亿人”的免费版本(或收1元成本费的基本免费版本),这是为大多数人免费提供的社区版,对这种版本,Red Hat不提供Bug Fix、Patch,也不向用户提供支持、服务;另一种是针对“100个人”(这是指企业用户),每户收费“100万元”(向企业提供若干套收费的版本,并向用户提供Bug Fix、Patch,提供支持和服务)。
3,在开源软件(社区版)上采取附加软件模块的方式
如国内开发的“银河麒麟”操作系统,它是在Free BSD(开源软件)基础上再开发的(自行开发的主要是安全软件,约占整个软件的不足20%),等于在80%的开源软件上附加上20%的闭源软件模块。这样做的结果,连美国国家安全局(NSA)都认为,“银河麒麟的研发使美国向中国军网进行渗透变得无效”。
顺便指出,基于开源软件(社区版),采用附加专用软件模块方式,在二次开发后形成的整体软件中,附加专用模块的构成不得大于20%,这时整体软件才还可称为“开源软件”。
4,定制模式
如Ubuntu。Ubuntu永远是免费的,用户可任意下载、自由使用和修改(这是指其发布的社区版);Ubuntu也有商业版,这是指由Ubuntu的发行商Canonical为用户定制特别版Ubuntu,Canonical并向用户提供支持和服务,这是要收费的。举例来说,Ubuntu支持服务的收费标准为:桌面(每套)9ⅹ5,250美元;24ⅹ7,900美元;服务器(每套)9ⅹ5,750美元;24ⅹ7,2750美元。
当然,如Linux内核(Kernel)等一些自由软件,是没有商业模式的。
在如上所述的基础上,我要回答一些人对开源软件认识的思想误区(谈一谈开源软件的是与非):
有人说:Linux都是免费的。不对!如上所述:Linux有免费的和付费的两类;对其他开源软件也如同Linux。
有人说:Linux的缺点是不为用户提供支持和服务。不完全对。只有免费的社区版是如此;而对付费的商业版(或企业版、产品版),Linux发行商要为用户提供在产品使用寿命周期内全程的支持和服务。
有人说:开源软件不应是商业软件,不应具商业模式。不对!上面说的很清楚了,开源软件可以配置商业服务模式(只有社区版免费的开源软件没有商业模式)。
有人问:免费与付费的开源软件在功能与服务上有什么区别?其实,免费的开源软件一般都是原创性的社区版,开源软件(社区版)的性能尚不够成熟,也不能完全满足某些重要用户的特殊需求,它可以免费获得,但得不到开发者的技术支持和相应服务;而收费的开源软件一般都是企业(发行商)后续开发的商业版(或产品版),此时性能趋于成熟(经工程化开发),能更好满足某些用户的需求(做好定制化开发工作),这时用户虽然要付费,但发行商将为用户提供在产品使用寿命周期内全程的技术支持和相应服务。
有人说:开源软件的开发无国界,是全球志愿者集体开发、合作创新的产物,不能把它限制在某一个企业或某一个国家来进行自主开发或自主创新。其实这说对了一半。开源社区对开源软件进行的原创性开发,是适用于这种说法的,说的完全对!但要使开源软件产品化,趋于成熟,更好地满足用户需求,还要进行工程化、定制化的后续开发工作,这些开发工作一般由企业(或发行商)来承担,这时的二次开发工作当然体现自主开发创新的特点。对于企业(发行商)最终推出的更为完整的、更加成熟的、产品化的开源软件版本(并配置商业服务模式),则可以称之为某企业的版本(并冠以其商标),也可称之为某地、某国的版本,所以,如果说到这种版本的“国产化”,我想也是可以的。
有人说:开源软件既要体现自由软件的价值观,又要配置商业模式,这是不可调和的矛盾,只能取其一,不能合其二。我要说的是,请你体会一下上面谈到的“开源软件是‘利他主义’与‘利己主义’对立统一(平衡)的产物”这句哲学语言的深刻含义,再看一下上面所列的开源软件社区版与商业版关系的各种类型,这时是否可以解答你的疑惑,而得出这样的结论:不搞极端,做好统一或平衡是完全可能的。
关于开源和微软的操作系统哪个安全的问题,现摘要5月12日《华盛顿时报》透露的9月30日美国国会听证会的有关消息,就一目了然了。《华盛顿时报》发表的署名文章,题目是《中国阻止美国发动网络战争》,文中透露美国政府网络安全专家、国家情报及美国战略司令部顾问凯文·G·科尔曼在美国国会(美中经济与安全评估委员会)听证会上的一些证词,科尔曼说:“美国过去一直利用中国军网和政府网络配备脆弱的操作系统(比如说微软的系统)的服务器的机会进行渗透,自从中国研发了名为银河麒麟(Kylin)这个更加安全的操作系统并于2007年服役后,该系统强化了中国关键的服务器,使美国军方和情报机构再也无法实行渗透,致使美国网络防卫能力无效!”
当然,我在这里也要指出,如果只是配置完全开放、透明的开源操作系统软件(社区版),也不足以保证我们网络的安全;网络安全呼唤能将自主创新包含于其中的开源软件。
系统方面不用向谷歌申请好像
关于安卓源码下载,求安卓2.3源代码的介绍到此结束,希望对大家有所帮助。