【图解】Android-X86 + VirtualBox 搭建高性能Android开发环境

 更新时间:2016年9月20日 19:58  点击:1540
本文我们以图文并茂的方式来讲讲如何用 Android-X86 和 VirtualBox 搭建一个高性能的Android开发环境,学习Android的同学可以参考学习一下。

不知道有多少Android开发着对Android虚拟机的那悲剧的性能有意见,反正我的看法是:那速度实在是太坑爹了!

为什么Android虚拟机比iOS和WP7的虚拟机要慢很多呢?原因如下:

1. Android 模拟器模拟的是 ARM 的体系结构(arm-eabi),而 iOS 和 WP7 的模拟器的目标体系结构都是 x86 的,另外 iOS 的模拟器中运行的 App 也是编译为 x86 的。这样一来 Android 模拟器需要做一些额外的二进制翻译工作。

2. Android 模拟器用的是 QEMU 的全系统模式(full system),也就说它模拟时需要启动整个 GUEST 系统,初始化各种模拟设备。相反的,iOS 和 WP7 的模拟器只是 user-mode 的模拟。

3. 在 Android 模拟器之中还需要跑一个 Dalvik VM,用以执行 Android 应用的 bytecodes。

综上所述,慢的一个主要原因就是虚拟机不是跑在x86上而是模拟的ARM,有没有办法弄个x86的Android呢?

答案是当然有———开源项目Android-x86,这个牛B的开源项目将Android移植到了x86平台,系统运行的时候不再需要模拟成ARM,这样就能直接将Android装在PC或虚拟机上流畅的运行了。

万事俱备,只欠东风了,下面我就来讲一下我使用Android-X86和VirtualBox打造手机开发模拟器的整个流程

1.下载Android-x86系统镜像文件

首先下载android-x86-2.2-generic.iso(直接点击该链接),镜像文件大约82MB

2.在VirtualBox上创建虚拟机

操作系统选择Linux,版本选择Linux 2.6

2011091920493586

 

内存建议为512MB

2011091920503414

 

硬盘默认8GB即可,因为是开发用,8GB绰绰有余了

虚拟机创建好之后,还需要修改一些配置

首先是调整网卡,连接方式建议选择bridged adapter这样虚拟机在局域网中有独立IP可以方便访问,然后控制芯片要选择为PCnet-PCI II,否则Android-x86无法识别网卡

2011091917175250

 

如果你想有声音的话需要在声音设置面板将控制芯片设置为soundblaser 16

2011091917182930

 

把虚拟机的光驱设置为我们刚才下载的Android-x86 iso之后,启动虚拟机

2011091917185753

 

思想之地原创文章,谢绝转载

3.安装Android-x86到虚拟机

虚拟机启动后,你可以看到下面的画面

2011091917192456

 

第一和第二的项目是让你不用安装体验高、中DPI的Android-x86,有兴趣的话可以先运行体验一下x86的速度

我们要安装Android到硬盘,选择最后一项后回车

Installation – Install Android-x86 to harddisk

接下来我们会进入安装界面,界面效果如下

2011091917200516

 

我们选择Create/Modify partitions来创建分区

首先我们选择new来创建新分区

2011091920522868

 

选择Primary创建主分区

2011091920525582

 

分区大小采用默认大小即可

2011091917284778

 

然后我们设定该分区可以引导(选中Bootable后回车),这是分区的flag会显示boot,然后我们再选择write将修改写入到硬盘(选择write之后还需要输入yes来确认)

2011091920535959

 

分区完毕后再选择quit即可退出,退出后,我们就能看到刚才分配的新分区被识别出来了

2011091920542162

 

按下回车选择该分区,这时会询问采用什么分区格式格式化分区,建议选择ext3

2011091920544391

 

选择好格式后系统会再跟你确认一遍,输入yes安装就会开始了

安装中途会询问你是否安装Grub,这里一定要选择YES,因为我们后需要Grub来自定义启动Android

2011091920550125

 

安装Grub的时候会询问你是否将/system目录安装为读写模式(设为读写可以更方便的debug,但是会占用更多的空间和安装时间),选择yes

2011091920552694

 

回车后安装就会开始了

2011091920554221

 

安装结束后,会弹出一个菜单

三个选项分别是

运行Android

创建一个虚拟SD卡

重启

2011091920560383

 

因为我们开发肯定会用到SD卡,所以在此我们创建一个虚拟SD卡

创建时会询问SD卡的大小,根据你的需要设定即可,我在此设定的是128MB

2011091920561958

 

回车后安装程序就会开始初始化sd卡了

格式完毕后,会提示重启,此时退出虚拟机光驱中的系统盘后重启,重启后就能进入Android系统了

注意使用在Android系统中使用鼠标的时候需要设置Virtual Box禁止自动鼠标独占,否则鼠标在Android中无法正常使用

2011091920563952

 

Android-x86运行截图:

2011091920565581

 

思想之地原创文章,谢绝转载

4.自定义虚拟机分辨率

我们在开发时肯定需要测试不同的分辨率,那么如何自定义Android虚拟机的分辨率呢?

首先我们需要从Virtual Box的设定入手

打开cmd,进入Virtual Box的下你创建的虚拟机的目录,我创建的虚拟机叫Android-x86,我的账户是Administrator,在我Windows XP上的路径是

C:Documents and SettingsAdministratorVirtualBox VMsAndroid-x86

注意:

1.在不同操作系统下路径会有一些不同,请根据操作系统的实际情况寻找,原则上都是在你当前用户的个人文件夹里

2.Android-x86是我创建的虚拟机的名称,如果你的和我的不同,请修改为你创建的虚拟机的名称

在这里我们需要使用VirtualBox提供的命令行工具来给你的虚拟机添加一个自定义分辨率,例如我想添加一个现在流行的手机屏幕分辨率 480×800,那么我们输入的命令如下

“C:Program FilesOracleVirtualBoxVBoxManage.exe” setextradata “Android-x86” “CustomVideoMode1″ “480x800x16“

上面的命令中,加粗的部分是要根据你自己电脑上的情况进行修改的,相关解释如下:

“C:Program FilesOracleVirtualBoxVBoxManage.exe”

是Virtual Box命令行工具VBoxManage.exe的完整路径,请根据你电脑上安装的VirtualBox的实际路径修改

注意:如果路径中含有空格请使用双引号将整个路径包起来

Android-x86

这个是虚拟机的名称

480x800x16

这个是自定义的分辨率,请根据自己的需要修改,后面的16指的是16位颜色,请勿修改

如果你想增加更多的分辨率,请修改参数后多次运行该命令即可

2011091920582365

 

修改完毕之后,启动虚拟机,在Android的启动画面选中选项后按两次e键编辑内核启动参数,增加一个参数 vga=ask,具体流程如下

启动画面按e键

2011091920585367

 

进入新画面后再按一次e键

2011091920591190

 

这时进入内核参数编辑状态,增加参数 vga=ask

2011091920593093

 

编辑完毕后按回车保存修改结果,这时会回到上一个页面,此时按下b键启动

此时系统会提示你按回车进入分辨率选择界面,我们按回车继续

2011091920595016

 

进入页面之后,你可以看到所有系统支持的分辨率,这时请寻找你刚才设定的分辨率,在下图中,可以找到在先前设定的 480×800的分辨率,注意其前面的16进制代码360,如果想以该分辨率启动虚拟机,我们就输入360再回车即可

2011091921001954

 

回车后Android就会按照你设定的分辨率来启动了,下图是以480×800分辨率启动的Android-x86虚拟机截图

2011091921022911

 

注意:

如果你需要系统采用你指定的分辨率启动,需要在每次Android虚拟机启动的时候执行上面步骤的操作来修改内核参数启动Android

如果你想Android在启动的时候就默认进入分辨率选择画面或者默认采用你指定的分辨率启动虚拟机,那么可以参考以下步骤

1. 进入android虚拟机后按alt+F1进入命令行

2. 输入mkdir /data/fs

3. 挂载硬盘,使用下列命令

mount -t 硬盘格式 /dev/block/硬盘名称 /data/fs

硬盘格式为你虚拟机硬盘的格式,我这里是ext3 硬盘名称则是你虚拟机的

硬盘名称我这默认是sda1,表示第一个sata硬盘, linx下具体的硬盘命名规则请自行Google之

mount -t ext3 /dev/block/sda1 /data/fs

将硬盘挂在到 /data/fs文件夹上

4. vi /data/fs/grub/menu.list 编辑启动菜单列表 (vi这个命令行编辑器怎么用请自行Google之)

5. 和刚才启动时一样,在第一个kernel那一行的末尾增加 vga=ask 后保存

6. 重启虚拟机,这时候你就会发现每次Android启动的时候就会询问分辨率了

5.使用eclipse ADT在虚拟机上远程调试开发

现在虚拟机已经配置完成,下面来讲解如何使用eclipse来在上面运行和调试Android应用程序

在前面设定虚拟机的时候我把虚拟机的网卡设置成了bridged adapter,这样虚拟机在局域网中相当于一台独立电脑,你可以给它设置一个ip或者讲其网卡设置为dhcp状态来自动获取ip,我下面只讲解一下在 dhcp状态下如何查看android虚拟机ip的方法:

进入android虚拟机,按alt+F1进入命令,输入netcfg命令来查看网络状态,参考界面如下

2011091921034649

 

其中eth0就是当前的网卡,后面的ip地址就是通过dhcp获得的ip地址

弄清楚之后再按alt+F7返回图形界面

此时我们打开eclipse,进入android开发插件的设定界面,选择ddms,勾选 Use ado host, 并在ADT host value 一栏填写虚拟机的ip地址,具体界面请参看下图

2011091921041388

 

选择ok保存后,在ddms界面的device菜单上选择重启adb服务,重启后,就能看到ddms连接上虚拟机了

2011091921043722

 

接下来就能和平常一样在虚拟上运行和测试你的Android程序了,enjoy~

最后总结一下这个环境的优缺点:

优点:

1.高速,相比Android SDK的虚拟机,无论是启动还是运行,本虚拟机要快上很多很多,让你可以流畅的运行测试你的Android应用,当然,也能舒服的在电脑上体验到Android系统:)

2.可以模拟平板电脑的环境

缺点:

1.硬件支持还是悲剧,像打电话,短信,重力感应,GPS摄像头什么的你还是得去弄台真机器调试(不过这些东西本来就不是模拟器能做的)

另外补充一下虚拟机中主页、返回、关机、菜单对应的键盘按键

Home键 -> Win键

返回键 -> ESC键

挂机键 -> alt+F4

菜单键 -> 键盘菜单键,一般在右边win键和ctrl键中间

TexturePacker是一款把若干资源图片拼接为一张大图的工具,现在我们来看看如何用TexturePacker软件实现*.pvr.ccz和png格式图片互转。

这两天在看一个安卓游戏,资源挺不错的,解压后发现animation里的图片格式全是pvr.ccz,查了下,这是做2D游戏spirit图打包后的格式,用的软件是TexturePacker,知道了软件那就知道如何解回去了。

下载TexturePacker

安装TexturePacker

将如下代码存成批处理

@echo off
path %path%;"C:Program Files (x86)TexturePackerbin"
for /f "usebackq tokens=*" %%d in (`dir /s /b *.pvr *.pvr.ccz *.pvr.gz`)
do (TexturePacker.exe "%%d" --sheet "%%~dpnd.png" --data "%%~dpnd.plist"
--opt RGBA8888 --allow-free-size --algorithm Basic --no-trim --dither-fs)
pause

将上面的批处理放在你的文件夹目录下,运行即可(支持遍历子目录)

将图片打包成pvr.czz,同样是需要一个批处理

@echo off
path %path%;"C:Program Files (x86)CodeAndWebTexturePackerbin"
for /f "usebackq tokens=*" %%d in (`dir /s /b *.png`) do (
TexturePacker.exe "%%d" --sheet "%%~dpnd.pvr" --data "%%~dpnd.plist"
  --opt PVRTC4 --allow-free-size --algorithm Basic --no-trim --dither-fs
)
pause

利用这个工具,我们来下载游戏资源图片就方便多啦,虽然此工具是商业收费的,不过也有免费版。

本教程采用图文结合的方式一步一步的整理Windows搭建Android开发环境详细步骤,对于刚入门想学Android开发新手来说最实用。

在windows安装Android的开发环境不简单也说不上算复杂,本文写给第一次想在自己Windows上建立Android开发环境投入 Android浪潮的朋友们,为了确保大家能顺利完成开发环境的搭建,文章写的尽量详细,希望对准备进入Android开发的朋友有帮助。

本教程将分为五个步骤来完成Android开发环境的部署。

第一步:安装JDK

要下载Oracle公司的JDK可以百度“JDK”进入Oracle公司的JDK下载页面(当前下载页面地址为http://www.oracle.com/technetwork/java/javase/downloads/index.html),选择自己电脑系统的对应版本即可。

【图解】如何在Windows搭建Android开发环境详细步骤

 

下载到本地电脑后双击进行安装。JDK默认安装成功后,会在系统目录下出现两个文件夹,一个代表jdk,一个代表jre。

【图解】如何在Windows搭建Android开发环境详细步骤

 

JDK的全称是Java SE Development Kit,也就是Java 开发工具箱。SE表示标准版。JDK是Java的核心,包含了Java的运行环境(Java Runtime Environment),一堆Java工具和给开发者开发应用程序时调用的Java类库。

我们可以打开jdk的安装目录下的Bin目录,里面有许多后缀名为exe的可执行程序,这些都是JDK包含的工具。通过第二步讲到的配置JDK的变量环境,我们可以方便地调用这些工具及它们的命令。

【图解】如何在Windows搭建Android开发环境详细步骤

 

JDK包含的基本工具主要有:

javac:Java编译器,将源代码转成字节码。

jar:打包工具,将相关的类文件打包成一个文件。

javadoc:文档生成器,从源码注释中提取文档。

jdb:debugger,调试查错工具。

java:运行编译后的java程序。

第二步:配置Windows上JDK的变量环境

很多刚学java开发的人按照网上的教程可以很轻松配置好Windows上JDK的变量环境,但是为什么要这么配置并没有多想。

我们平时打开一个应用程序,一般是通过桌面的应用程序图标双击或单击系统开始菜单中应用程序的菜单链接,无论是桌面的快捷图标还是菜单链接都包含了应用程序的安装位置信息,打开它们的时候系统会按照这些位置信息找到安装目录然后启动程序。

【图解】如何在Windows搭建Android开发环境详细步骤

 

知道了一个应用程序的安装目录位置,我们也可以通过命令行工具打开,如QQ的位置为:C:Program Files (x86)TencentQQQQProtectBin,QQ的应用程序名为为QQProtect.exe,那么我们打开命令行工具,然后进入到 “C:Program Files (x86)TencentQQQQProtectBin”目录,再输入“QQProtect”,即可运行qq。

【图解】如何在Windows搭建Android开发环境详细步骤

 

如果我们希望打开命令行工具后,直接输入“QQProtect”就能启动qq程序,而不是每次都进入qq的安装目录再启动,这个时候可以通过配置系统环境变量Path来实现。右击“我的电脑”,选择“属性”,在打开窗口中点击左边的“高级系统设置”,出现“系统属性”窗口,在“高级”选项卡下面点击 “环境变量”。

【图解】如何在Windows搭建Android开发环境详细步骤

 

编辑系统变量名“Path”,在“Path”变量(字符串内容)的后面追加qq的安装目录:;C:Program Files (x86)TencentQQQQProtectBin 注意追加的时候要在目录字符串的前面加个英文的分号;,英文分号是用来区分Path里面不同的路径。

【图解】如何在Windows搭建Android开发环境详细步骤

 

确定保存后,再回到命令窗口,不管在任何目录下,你只要输入qqprotect的命令,qq就会启动。

【图解】如何在Windows搭建Android开发环境详细步骤

 

通过启动qq的例子,我们总结下:当要求系统启动一个应用程序时,系统会先在当前目录下查找,如果没有则在系统变量Path指定的路径去查找。前面我们说了JDK包含了一堆开发工具,这些开发工具都在JDK的安装目录下,为了方便使用这些开发工具,我们有必要把JDK的安装目录设置了系统变量。这就是为什么在Windows安装了JDK后需要设置JDK的bin目录为系统环境变量的原因。

为了配置JDK的系统变量环境,我们需要设置三个系统变量,分别是JAVA_HOME,Path和CLASSPATH。下面是这三个变量的设置防范。

JAVA_HOME

先设置这个系统变量名称,变量值为JDK在你电脑上的安装路径:C:Program FilesJavajdk1.8.0_20。创建好后则可以利用%JAVA_HOME%作为JDK安装目录的统一引用路径。

Path

PATH属性已存在,可直接编辑,在原来变量后追加:;%JAVA_HOME%bin;%JAVA_HOME%jrebin 。

CLASSPATH

设置系统变量名为:CLASSPATH 变量值为:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar 。

注意变量值字符串前面有一个”.”表示当前目录,设置CLASSPATH 的目的,在于告诉Java执行环境,在哪些目录下可以找到您所要执行的Java程序所需要的类或者包。

第三步: 下载安装Eclipse

Eclipse为Java应用程序及Android开发的IDE(集成开发环境)。Eclipse不需要安装,下载后把解压包解压后,剪切eclipse文件夹到你想安装的地方,打开时设置你的工作目录即可。

Eclipse的版本有多个,这里选择下载Eclipse IDE for Java EE Developers这个版本。

【图解】如何在Windows搭建Android开发环境详细步骤

 

第四步:下载安装Android SDK

配置了JDK变量环境,安装好了Eclipse,这个时候如果只是开发普通的JAVA应用程序,那么Java的开发环境已经准备好了。我们要通过 Eclipse来开发Android应用程序,那么我们需要下载Android SDK(Software Development Kit)和在Eclipse安装ADT插件,这个插件能让Eclipse和Android SDK关联起来。

Android SDK提供了开发Android应用程序所需的API库和构建、测试和调试Android应用程序所需的开发工具。

打开http://developer.android.com/sdk/index.html,我们发现google提供了集成了Eclipse的Android Developer Tools,因为我们这次是已经下载了Eclipse,所以我们选择单独下载Android SDK。

下载后双击安装,指定Android SDK的安装目录,为了方便使用Android SDK包含的开发工具,我们在系统环境变量中的Path设置Android SDK的安装目录下的tools目录。

在Android SDK的安装目录下,双击“SDK Manager.exe”,打开Android SDK Manager,Android SDK Manage负责下载或更新不同版本的SDK包,我们看到默认安装的Android SDK Manager只安装了一个版本的sdk tools。

【图解】如何在Windows搭建Android开发环境详细步骤

 

打开Android SDK Manager,它会获取可安装的sdk版本,但是国内有墙,有时候会出现获取失败的情况。

【图解】如何在Windows搭建Android开发环境详细步骤

 

从弹出的log窗口中,我们可以看到连接 “https://dl-ssl.google.com”失败了。我们通过ping命令,发现果然网络不通。

【图解】如何在Windows搭建Android开发环境详细步骤

 

从万能的互联网上,我们找到了解决这个问题的方案,而且行之有效。

更改host文件

首先更改host文件,host文件在C:WindowsSystem32driversetc目录下,用记事本打开“hosts”文件,将下面两行信息追加到hosts文件末尾,保存即可。如果你的是windows8系统可能没有权限修改host文件,可以右击hosts文件,将 Users组设置为可对hosts文件完全控制的权限即可。

203.208.46.146 dl.google.com

203.208.46.146 dl-ssl.google.com

上面两行放在host文件的意思是将本地访问dl.google.com和dl-ssl.google.com定向到ip地址为203.208.46.146的服务器上。

【图解】如何在Windows搭建Android开发环境详细步骤

 

将Android SDK Manage上的https请求改成http请求

打开Android SDK Manager,在Tools下的 Options 里面,有一项 Force https://..sources to be fetched using http://… 将这一项勾选上,就可以了。

【图解】如何在Windows搭建Android开发环境详细步骤

 

再打开Android SDK Manager.exe,正常情况下就可以下载Android的各个版本的sdk了。你只需要选择想要安装或更新的安装包安装即可。这里是比较耗时的过程,还会出现下载失败的情况,失败的安装包只需要重新选择后再安装就可以了。

【图解】如何在Windows搭建Android开发环境详细步骤

 

第五步:为Eclipse安装ADT插件

前面我们已经配置好了java的开发环境,安装了开发Android的IDE,下载安装了Android SDK,但是Eclipse还没有和Android SDK进行关联,也就是它们现在是互相独立的,就好比枪和子弹分开了。为了使得Android应用的创建,运行和调试更加方便快捷,Android的开发团队专门针对Eclipse IDE定制了一个插件:Android Development Tools(ADT)。

下面是在线安装ADT的方法:

启动Eclipse,点击 Help菜单 -> Install New Software… ?,点击弹出对话框中的Add… 按钮。

【图解】如何在Windows搭建Android开发环境详细步骤

 

然后在弹出的对话框中的Location中输入:http://dl-ssl.google.com/android/eclipse/,Name可以输入ADT,点击“OK”按钮。

【图解】如何在Windows搭建Android开发环境详细步骤

 

在弹出的对话框选择要安装的工具,然后下一步就可以了。

【图解】如何在Windows搭建Android开发环境详细步骤

 

安装好后会要求你重启Eclipse,Eclipse会根据目录的位置智能地和它相同目录下Android sdk进行关联,如果你还没有通过sdk manager工具安装Android任何版本的的sdk,它会提醒立刻安装它们。

【图解】如何在Windows搭建Android开发环境详细步骤

 

如果Eclipse没有自动关联Android sdk的安装目录,那么你可以在打开的Eclipse选择 Window -> Preferences ,在弹出面板中就会看到Android设置项,填上安装的SDK路径,则会出现刚才在SDK中安装的各平台包,按OK完成配置。

【图解】如何在Windows搭建Android开发环境详细步骤

 

到这里,我们在windows上的Android上的开发环境搭建就完成了,这时候,你用Eclipse的File——》New——》Project…新建一个项目的时候,就会看到建立Android项目的选项了。

【图解】如何在Windows搭建Android开发环境详细步骤

 

Android开发技术日趋成熟,开源社区也涌现了很多开源UI项目,以下是笔者整理的7款Android开发者常用的Android UI组件及官方下载地址。

Android开发是目前最热门的移动开发技术之一,随着开发者的不断努力和Android社区的进步,Android开发技术已经日趋成熟,当然,在Android开源社区中也涌现了很多不错的开源UI项目,它们可以帮助Android开发者更方便快捷地完成想要的功能。本文是Android系列的第一篇,主要是向大家推荐一些常用的Android UI组件,它们都是开源的。

1、图表引擎 - AChartEngine

AChartEngine是一款基于Android的图表绘制引擎,它为Android开发者提供了很多实用的图表绘制工具类,如果你需要在Android应用中添加可视化统计的功能,那么AChartEngine是一个不错的选择。

整理的7款常用的开源免费的Android UI组件及官方下载地址

 

官方网站:https://code.google.com/p/achartengine/

2、图表引擎 - MPAndroidChart

MPAndroidChart是一款基于Android的开源图表库,MPAndroidChart不仅可以在Android设备上绘制各种统计图表,而且可以对图表进行拖动和缩放操作,应用起来非常灵活。和前面介绍的AChartEngine相比,MPAndroidChart显得更为轻巧和简单,MPAndroidChart同样拥有常用的图表类型:线型图、饼图、柱状图和散点图。

整理的7款常用的开源免费的Android UI组件及官方下载地址

 

官方网站:https://github.com/PhilJay/MPAndroidChart

3、地图引擎 - OSMDroid

OSMDroid是一款基于Android的模块化地图引擎,如果你觉得Android内置的MapView 类不能满足项目的要求,那么可以试试OSMDroid。它是完全模块化的,可以让你的Android应用程序更加灵活可控。OSMDroid支持在线和离线地图以及覆盖地图,支持标注图标、位置跟踪和绘制形状等功能,因此你可以完全定制地图的展示方式和地图数据的存取。

整理的7款常用的开源免费的Android UI组件及官方下载地址

 

官方网站:https://code.google.com/p/osmdroid/

4、日历日期组件 - Mobi Pick

Mobi Pick是一款Android风格的日期选择组件,主要利用了jQuery Mobile脚本库。Mobi Pick提供了3种不同的日期选择功能,最简单的日期选择功能是选择年月日,另外一种是可以自定义修改年月日,还有一种是可以下拉选择日期。由于Mobi Pick有着Android的风格样式,因此外观相当漂亮。

整理的7款常用的开源免费的Android UI组件及官方下载地址

 

官方网站:http://mobipick.sustainablepace.net/

5、滚动组件 - Glide

Glide是一款基于Android的图片加载和图片缓存组件,它可以最大性能地在Android设备上读取、解码、显示图片和视频。Glide可以将远程的图片、视频、动画图片等缓存在设备本地,便于提高用户浏览图片的流畅体验。

整理的7款常用的开源免费的Android UI组件及官方下载地址

 

官方网站:https://github.com/bumptech/glide

6、图片控件 - GifView

由于Android中并没有直接播放动画GIF图片的view,所以我们可以利用GifView控件来实现GIF图片展示功能。GifView的Jar包由四个类组成:

GifAction.java 主要用来监视GIF图片是否加载成功

GifFrame.java 里面三个成员:当前图片、延时、下张Frame的链接。

GifDecoder.java 解码线程类

GifView.java 是核心类,包含GifView构造方法,还可以设置图片源、延迟、绘制等。

官方网站:https://code.google.com/p/gifview/

7、下拉刷新 - Android PullToRefresh

Android PullToRefresh是一款可以再Android系统中下拉刷新的应用组件,可以很方便的让ListView拥有下拉刷新的功能。

整理的7款常用的开源免费的Android UI组件及官方下载地址

 

做Android开发的小伙伴们可以关注这个系列的文章,也可以在Android应用开发栏目中关注我们对Android项目的更新。

Android为了安全起见,默认情况下任何应用创建的文件、sharedpreferences数据库都是私有的,其余进程不能正确访问,现在我们来讲解一下Android文件私有存储和私有文件资源文件的存取。
Android文件私有存储


首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己的应用的内部存储路径下。所有内部存储中保存的文件在用户卸载应用的时候会被删除。

一、 files

1. Context.getFilesDir(),该方法返回/data/data/youPackageName/files的File对象。
2. Context.openFileInput()与Context.openFileOutput(),只能读取和写入files下的文件,返回的是FileInputStream和FileOutputStream对象。
3. Context.fileList(),返回files下所有的文件名,返回的是String[]对象。
4. Context.deleteFile(String),删除files下指定名称的文件。

二、cache

Context.getCacheDir(),该方法返回/data/data/youPackageName/cache的File对象。

三、getDir

getDir(String name, int mode),返回/data/data/youPackageName/下的指定名称的文件夹File对象,如果该文件夹不存在则用指定名称创建一个新的文件夹。

Android私有文件资源文件的存取


Android有一套自己的安全模型, 可参见Android开发文档。当应用程序安装时就会分配一个userid,当应用要去访问其他资源比如文件时,需要userid匹配。默认情况下 ,任何应用创建的文件,数据库, sharedpreferences都应该是私有的(位于/data/data/your_project/files/),其余程序无法访问。除非在创建时指明是MODE_WORLD_READABLE 或者 MODE_WORLD_WRITEABLE,只要这样其余程序才能正确访问。因为有这种Android读写文件的方法在安全上有所保障,进程打开文件时Android要求检查进程的user id。所以不能直接用java的api来打开,因为java的io函数没有提这个机制 。有一个问题系统必须已经root,并且文件浏览器取得root权限否则通过文件浏览器是看不到那些目录的。

一、私有文件夹下的文件存取(./data/data/com.包名/files/下面,相当于程序工作目录)

无法用java的api直接打开程序私有的数据 ,默认路径为/data/data/your_project/files/,从sdcard中去读文件,首先要把文件通过android-sdk-windowstoolsadb.exe把本地计算机上的文件copy到sdcard上去,adb.exe push e:/Android.txt/sdcard/, 不可以用adb.exe push e:Android.txt sdcard,注意斜杠的,在linux下和winodws下是不一样的, 同样: 把仿真器上的文件copy到本地计算机上用: adb pull ./sdcard/Android.txt e:/ ,读取路径可以用“/sdcard/Android.txt”也可以用“mnt/sdcard/Android.txt”

如:

FileReader file = new FileReader("Android.txt");

这里特别强调私有数据!言外之意是如果某个文件或者数据不是程序私有的,既访问它时无须经过Android的权限检查,那么还是可以用java的io api来直接访问的。所谓的非私有数据是只放在sdcard上的文件或者数据,

可以用java的io api来直接打开sdcard上文件。

 如:

FileReader file = new FileReader("/sdcard/Android.txt");

如果要打开程序自己私有的文件和数据,那必须使用Activity提供openFileOutput和openFileInput方法。创建程序私有的文件,由于权限方面的要求,必须使用activity提供的Android读写文件方法。
如:

 代码如下 复制代码
 import java.io.FileInputStream;   
 import java.io.FileOutputStream;   
 import org.apache.http.util.EncodingUtils;   
    
 public void writeFileData(String fileName,String message){   
     try{   
      FileOutputStream fout = openFileOutput(fileName, MODE_PRIVATE); 
      //OutputStreamWriter outWriter = new OutputStreamWriter(fout);  
      byte [] bytes = message.getBytes();   
      fout.write(bytes);   
       fout.close();   
      }   
     catch(Exception e){   
      e.printStackTrace();   
     }   
 }      
    
 public String readFileData(String fileName){   
      String res="";   
      try{   
       //FileInputStream fin = openFileInput(fileName); 
       //InputStreamReader inReader = new InputStreamReader(fin); 
       //或者 
       FileInputStream fin = new FileInputStream(fileName); 
       int length = fin.available();   
       byte [] buffer = new byte[length];   
       fin.read(buffer);       
       res = EncodingUtils.getString(buffer, "UTF-8");   
       fin.close();       
      }   
      catch(Exception e){   
       e.printStackTrace();   
      }   
      return res;   
     }



二、从resource中的raw文件夹中获取文件并读取数据(资源文件只能读不能写,在"程序名resrawFileName.txt")

 代码如下 复制代码
public String getFromRaw(String fileName){   
    String res = "";   
       try{   
        InputStream in = getResources().openRawResource(R.raw.test1);    
        //资源在Testresrawtest1.txt 
        int length = in.available();         
        byte [] buffer = new byte[length];          
        in.read(buffer);   
        //依bbi.txt的编码类型选择合适的编码,如果不调整会乱码         
        res = EncodingUtils.getString(buffer, "UTF-8");  
        //res =EncodingUtils.getString(buffer, "BIG5"); 
        //res =EncodingUtils.getString(buffer, "UNICODE"); 
        in.close();              
       }   
       catch(Exception e){   
        e.printStackTrace();           
       }   
    return res ;   
   }


三、从asset中获取文件并读取数据(资源文件只能读不能写,在"程序名assertsFileName.txt")

 代码如下 复制代码
public String getFromAsset(String fileName){   
    String res="";   
    try{   
     InputStream in = getResources().getAssets().open(fileName);     
     int length = in.available();           
        byte [] buffer = new byte[length];          
        in.read(buffer);              
        res = EncodingUtils.getString(buffer, "UTF-8");       
    }   
    catch(Exception e){   
     e.printStackTrace();           
    }   
    return res;   
   } 
[!--infotagslink--]

相关文章

  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
  • Android设置TextView竖着显示实例

    TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
  • mac下Apache + MySql + PHP搭建网站开发环境

    首先为什不自己分别搭建Apache,PHP和MySql的环境呢?这样自己可以了解更多知识,说起来也更酷。可也许因为我懒吧,我是那种“既然有现成的,用就是了”的人。君子生非异也,善假于物也。两千年前的荀子就教导我们,要善于利用工具...2014-06-07
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20
  • Android 实现钉钉自动打卡功能

    这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
  • Android 开发之布局细节对比:RTL模式

    下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • Android开发之PhoneGap打包及错误解决办法

    下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
  • 用Intel HAXM给Android模拟器Emulator加速

    Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20
  • Android判断当前屏幕是全屏还是非全屏

    在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20
  • Android开发中布局中的onClick简单完成多控件时的监听的利与弊

    本文章来为各位介绍一篇关于Android开发中布局中的onClick简单完成多控件时的监听的利与弊的例子,希望这个例子能够帮助到各位朋友. 首先在一个控件加上这么一句:and...2016-09-20
  • Ubuntu 系统下安装Android开发环境 Android Studio 1.0 步骤

    Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试,可以在Linux,Mac OS X,Window...2016-09-20