安卓手机安装linux系统范文模板 13页.docx
- 文档编号:16645674
- 上传时间:2023-07-16
- 格式:DOCX
- 页数:14
- 大小:21.98KB
安卓手机安装linux系统范文模板 13页.docx
《安卓手机安装linux系统范文模板 13页.docx》由会员分享,可在线阅读,更多相关《安卓手机安装linux系统范文模板 13页.docx(14页珍藏版)》请在冰点文库上搜索。
安卓手机安装linux系统范文模板13页
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!
==本文为word格式,下载后可方便编辑和修改!
==
安卓手机安装linux系统
篇一:
linux系统搭建android开发环境教程
linux系统搭建android开发环境教程面来讲解一下linux系统搭建android开发环境教程,我们前面才讲了在windows下搭建android开发环境,现在为什么又要讲在linux下搭建android开发环境呢?
原因很简单,因为android是基于linux的内核开发的,所以在Android在Linux下运行速度更快,性能更稳定,最重要的是bug少,可能真正在开发的过程中,给我们减少不少负担。
所以建议大家尽量在linux的环境开发。
我电脑装的linux版本是ubuntu-10.10-desktop-i386,那么我下面的讲的教程也是ubuntu-10.10-desktop-i386下进行的。
在安装之前,首先我们要准备环境配置安装的三个软件,这三个软件分布是:
JavaJdk(jdk-6u27-linux-i586.bin),AndroidSDK(android-sdk_r12-linux_x86),
eclipse(eclipse-SDK-3.7-linux-gtk.tar.gz)开发工具,这三个软件可以去相对应的官网下载。
接下来,我们先在linux系统上创建一个android用户,这个用户用来干什么呢?
就是用管理我们即将要搭建的android开发环境的,用户搭建好后,把我们之前下载的三个软件拷贝在我们所建立的android用户下,用户目录位置是:
/home/android,也就是在拷贝在“/home/android目录下”。
下面就正式开始在linux下搭建android开发环境。
如下图示所示:
开始安装JavaJdk,因为后面的eclipse和AndroidSDK都是在JDK下面运行的,所以我们选择必须保证我们选择是安装的必须是基于刚建议用户的/home/android下面运行。
给jdk-6u27-linux-1586.bin添加可执行权限chmodu+xjdk-6u27-linux-1586.bin
使用./jdk-6u27-linux-1586.bin
开始配置环境变量,Linux下需要修改/etc/profile文件,使用sudovi/etc/profile,详细如下图所示:
修改变量完成后,也就是我们刚修改的环境变量不能马上生效,怎么办?
我们重启“source/etc/profile”就能解决环境变量不能生效的问题,什么我们这里需要“source
/etc/profile”,然后我们用“java-version”来验证JavaJdk是否安装成功了!
详细如下图所示:
JavaJdk安装成功后,接来我们就安装AndroidSDK,
安装之前把我们刚下载下来的安装安装压缩包减压缩(tar-zxvf
android-sdk_r12-linux_x86.tgz)。
减压缩后,我们就用使用android-sdk-linux_x86/tools/android在运行AndroidSDKandAVDManager,详细操作如下图所示:
点击“击Avaliablepackages”,然后在选择“SDKPlatformAndroid2.2AP1.8revission3”的复选框,然后在点击“InstallSelected”详细如如图所示:
以上安装完成后,根据图提示,在点击“Virtualdelives”新建一个Android虚拟机,详
细如下图:
android虚拟主机建成功,详细下如:
androi虚拟主机安装成功后,我们继续安装eclipse开发工具,
安装之前先把刚下载的Eclips安装包减压缩,解压缩:
tar-zxvf
eclipse-SDK-3.7-linux-gtk.tar.gz
进入刚减压缩的文件目录,早到安装文件“eclipse”
,然后直接运行“eclipse”,详细如下图所示:
安装ADT插件,Help->InstallNewSoftware...->在Workwith的地方输入:
/android/eclipse/进行验证,如果出错,请把“https”还成“http”,选中“DeveloperTools”,详细如下图所示:
全部设置完成后在点击“Next”进行安装,
篇二:
Android本质上就是一个基于Linux内核的操作系统
Android本质上就是一个基于Linux内核的操作系统。
与UbuntuLinux、FedoraLinux类似。
只是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程序并不是由一个源代码文件组成的,而是由一组源代码文件的目标文件链接而成的。
这些文件位于如下的目录。
其中init.c是init的主文件,现在打开该文件,看看其中的内容。
由于init是命令行程序,所以分析init.c首先应从main函数开始,现在好到main函数,代码如下:
intmain(intargc,char**argv)
{
intfd_count=0;
structpollfdufds[4];
char*tmpdev;
char*debuggable;
chartmp[32];
intproperty_set_fd_init=0;
intsignal_fd_init=0;
intkeychord_fd_init=0;
boolis_charger=false;
if(!
strcmp(basename(argv[0]),"ueventd"))
returnueventd_main(argc,argv);
if(!
strcmp(basename(argv[0]),"watchdogd"))
returnwatchdogd_main(argc,argv);
/*cleartheumask*/
umask(0);
//下面的代码开始建立各种用户空间的目录,如/dev、/proc、/sys等
mkdir("/dev",0755);
mkdir("/proc",0755);
mkdir("/sys",0755);
mount("tmpfs","/dev","tmpfs",MS_NOSUID,"mode=0755");
mkdir("/dev/pts",0755);
mkdir("/dev/socket",0755);
mount("devpts","/dev/pts","devpts",0,NULL);
mount("proc","/proc","proc",0,NULL);
mount("sysfs","/sys","sysfs",0,NULL);
/*检测/dev/.booting文件是否可读写和创建*/
close(open("/dev/.booting",O_WRONLY|O_CREAT,0000));
open_devnull_stdio();
klog_init();
//初始化属性
property_init();
get_hardware_name(hardware,&revision);
//处理内核命令行
process_kernel_cmdline();
……
is_charger=!
strcmp(bootmode,"charger");
INFO("propertyinit\n");
if(!
is_charger)
property_load_boot_defaults();
INFO("readingconfigfile\n");
//分析/init.rc文件的内容
init_parse_config_file("/init.rc");
……//执行初始化文件中的动作
action_for_each_trigger("init",action_add_queue_tail);
//在charger模式下略过mount文件系统的工作
if(!
is_charger){
action_for_each_trigger("early-fs",action_add_queue_tail);
action_for_each_trigger("fs",action_add_queue_tail);
action_for_each_trigger("post-fs",action_add_queue_tail);
action_for_each_trigger("post-fs-data",action_add_queue_tail);
}
queue_builtin_action(property_service_init_action,"property_service_init");
queue_builtin_action(signal_init_action,"signal_init");
queue_builtin_action(check_startup_action,"check_startup");
if(is_charger){
action_for_each_trigger("charger",action_add_queue_tail);
}else{
action_for_each_trigger("early-boot",action_add_queue_tail);
action_for_each_trigger("boot",action_add_queue_tail);
}
/*runallpropertytriggersbasedoncurrentstateoftheproperties*/
queue_builtin_action(queue_property_triggers_action,"queue_property_triggers");
#ifBOOTCHART
queue_builtin_action(bootchart_init_action,"bootchart_init");
#endif
//进入无限循环,建立init的子进程(init是所有进程的父进程)
for(;;){
int,i,timeout=-1;
//执行命令(子进程对应的命令)
execute_one_command();
restart_processes();
if(!
property_set_fd_init&&get_property_set_fd()>0){
ufds[fd_count].fd=get_property_set_fd();
ufds[fd_count].events=POLLIN;
ufds[fd_count].revents=0;
fd_count++;
property_set_fd_init=1;
}
if(!
signal_fd_init&&get_signal_fd()>0){
ufds[fd_count].fd=get_signal_fd();
ufds[fd_count].events=POLLIN;
ufds[fd_count].revents=0;
fd_count++;
signal_fd_init=1;
}
if(!
keychord_fd_init&&get_keychord_fd()>0){
ufds[fd_count].fd=get_keychord_fd();
ufds[fd_count].events=POLLIN;
ufds[fd_count].revents=0;
fd_count++;
keychord_fd_init=1;
}
if(process_needs_restart){
timeout=(process_needs_restart-gettime())*1000;
if(timeout<0)
timeout=0;
}
if(!
action_queue_empty()||cur_action)
timeout=0;
//bootchart是一个性能统计工具,用于搜集硬件和系统的信息,并将其写入磁盘,以便其
//他程序使用
#ifBOOTCHART
if(bootchart_count>0){
if(timeout<0||timeout>BOOTCHART_POLLING_MS)
timeout=BOOTCHART_POLLING_MS;
if(bootchart_step()<0||--bootchart_count==0){
bootchart_finish();
bootchart_count=0;
}
}
#endif
//等待下一个命令的提交
=poll(ufds,fd_count,timeout);
if(<=0)
continue;
for(i=0;i if(ufds[i].revents==POLLIN){ if(ufds[i].fd==get_property_set_fd()) handle_property_set_fd(); elseif(ufds[i].fd==get_keychord_fd()) handle_keychord(); elseif(ufds[i].fd==get_signal_fd()) handle_signal(); } } } return0; } 我们可以看到main函数是非常复杂的,不过我们也不需要每条语句都弄得非常清楚(因为这样弄是非常困难的),通常只需要了解init的主线即可。 其实从init的main函数可以看出。 Init实际上就分为如下两部分。 1.初始化(包括建立/dev、/proc等目录、初始化属性、执行init.rc等初始化文件中的action等)。 2.使用for循环无限循环建立子进程。 第一项工作很好理解。 而第二项工作是init中的核心。 在Linux系统中init是一切应用空间进程的父进程。 所以我们平常在Linux终端执行的命令,并建立进程。 实际上都是在这个无限的for循环中完成的。 也就是说,在Linux终端执行ps–e命令后,看到的所有除了init外的其他进程,都是由init负责创建的。 而且init也会常驻内容。 当然,如果init挂了,Linux系统基本上就崩溃了。 由于init比较复杂,所以本文只分析其中的一部分,在后续文章中将详细分析init的各个核心组成部分。 对于main函数最开始完成的建立目录的工作比较简单,这部分也没什么可以分析的。 就是调用了一些普通的API(mkdir)建立一些目录。 现在说一些题外话,由于Android的底层源代码(包括init)实际上是属于Linux应用编程领域,所以要想充分理解Android源代码,除了Linux的基本结构要了解外,Linux应用层的API需要熟悉。 为了满足这些读者的需要,后续我会写一些关于Linux应用编程的文章。 Ok,现在言归正传,接下来分析一个比较重要的部分: 配置文件的解析。 这里的配置文件主要指init.rc。 读者可以进到Android的shell,会看到根目录有一个init.rc文件。 该文件是只读的,即使有了root权限,可以修改该文件也没有。 因为我们在根目录看到的文件只是内存文件的镜像。 也就是说,android启动后,会将init.rc文件装载到内存。 而修改init.rc文件的内容实际上只是修改内存中的init.rc文件的内容。 一旦重启android,init.rc文件的内容又会恢复到最初的装载。 想彻底修改init.rc文件内容的唯一方式是修改Android的ROM中的内核镜像(boot.img)。 其实boot.img名曰内核镜像,不过该文件除了包含完整的Linux内核文件(zImage)外,还包括另外一个镜像文件(ramdisk.img)。 ramdisk.img就包含了init.rc文件和init命令。 所以只有修改ramdisk.img文件中的init.rc文件,并且重新打包boot.img文件,并刷机,才能彻底修改init.rc文件。 如果读者有Android源代码,编译后,就会看到out目录中的相关子目录会生成一个root目录,该目录实际上就是ramdisk.img解压后的内容。 会看到有init命 篇三: 在linux下安装android以及配置C和C++开发环境 在linux下安装android以及C/C++开发环境 一、首先安装之前你得做好准备。 1.安装好了linux(废话) 2.必要的安装包(我用的都是写这篇文章的时候官方发布的最高版本。 ) jdk-7u4-linux-i586.tar.gz(java运行环境在甲骨文的官网下的) android-sdk_r18-linux.tar(android开发需要的sdk)eclipse-jee-indigo-SR2-linux-gtk.tar.gz(开发环境) android-ndk-linux.tar(这个可装可不装如果你需要用到android+c/c++的开发模式你就安装吧用不上装一下也没关系 ) ADT-18.0.0.zip你可以选择离线下载最新版本也可以不下载。 如果你需要进行android开发这个是必须要的组件 cdt-master-8.0.2.zip你可以选择下载也可以不下载。 如果你想让的的eclipse能进行c/c++的开发环境那么这就是个必要的组件 如果你用的虚拟机那么你安装了vmtools之后就可以直接往里面拖东西了。 当然,你也可以选择设置共享文件夹进行宿主系统和虚拟机系统之间的文件共享。 (如何设置这个比较简单不在这里说明)。 我这里就在我root目录下建立一个android文件夹把所有的安装准备和需要全部cp过去了。 二、准备工作完成之后你就可以开始安装了。 说实话安装如果顺利你会觉得非常快。 当然除去某一个需要下载的步骤。 打开终端随便进入一个你决定安装的地方。 我不太喜欢用sudo命令而是喜欢直接用root权限在linux里瞎搞,所以我打开终端直接就进入我/root/android决定安装在这里了的/root/android/文件夹了。 一各种解压 1.解压jdk-7u4-linux-i586.tar.gz tarxvvzf/root/android/jdk-7u4-linux-i586.tar.gz 2. tarxvvzf/root/android/eclipse-jee-indigo-SR2-linux-gtk.tar.gz 3. tarxvvf/root/android/android-sdk_r18-linux.tar 4. tarxvvf/root/android/android-ndk-linux.tar vi/etc/profile 解压eclipse-jee-indigo-SR2-linux-gtk.tar.gz解压android-sdk_r18-linux.tar解压android-ndk-linux.tar(ps: 想了解tar命令你可以mantar看看里面的说明)二配置环境解压好了就可以开始配置环境了。 在最后(fi和umask022之间加上下面这些) exportJAVA_HOME=/root/android/jdk1.7.0_04exportPATH=$JAVA_HOME/bin: $PATH CLASSPATH=.: $JAVA_HOME/lib/tools.jar: $JAVA_HOME/lib/dt.jar: $CLASSPATH exportNDK=/root/android/android-ndk-r8 exporteclipse=/root/android/eclipse 完了esc: wq退出 输入source/etc/profile刷新一下环境变量。 (或者重启一次或注销一次) 接着打开终端测试安装成功与否 java-version 终端输出了版本号java就安装成功了 javaversion"1.7.0_04" Java(TM)SERuntimeEnvironment(build1.7.0_04-b20)JavaHotSpot(TM)ClientVM(build23.0-b21,mixedmode)接着测试一下ndk和eclipse(NDK需要配置但是其实eclipse是不需要的只是我比较喜欢直接输命令打开程序所以配置一下) $NDK/ndk-build 终端输出了错误信息那么就配置成功了。 AndroidNDK: Couldnotfindapplicationprojectdirectory! export AndroidNDK: Pleasedefinethe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 安卓手机安装linux系统范文模板 13页 手机 安装 linux 系统 范文 模板 13