<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_game-over</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/29306/rss</id><updated>2012-02-05T08:29:58Z</updated><author><name>Game_over</name><uri>http://www.cnblogs.com/game-over/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/game-over/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/29306/rss"/><entry><id>http://www.cnblogs.com/game-over/archive/2010/12/06/1898160.html</id><title type="text">构建Android自动编译持续集成系统</title><summary type="text">因为我们专业，所以我们用Auto Build，所以我们用CI系统。代码管理使用SVN，自动编译使用Ant，而持续集成使用Hudson，操作系统使用Ubuntu10.04。1. 安装1.1 安装JDK sudo apt-get install sun-java6-jdk1.2 安装Ant sudo apt-get install ant-optional1.3 安装Hudson sudo apt-get upgrade  wget -O /tmp/key http://hudson-ci.org/debian/hudson-ci.org.key sudo apt-key add /tmp/key</summary><published>2010-12-06T13:45:00Z</published><updated>2010-12-06T13:45:00Z</updated><author><name>Game_over</name><uri>http://www.cnblogs.com/game-over/</uri></author><link rel="alternate" href="http://www.cnblogs.com/game-over/archive/2010/12/06/1898160.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/game-over/archive/2010/12/06/1898160.html"/><content type="html">&lt;p&gt;因为我们专业，所以我们用Auto Build，所以我们用CI系统。&lt;/p&gt;&#xD;
&lt;p&gt;代码管理使用SVN，自动编译使用Ant，而持续集成使用Hudson，操作系统使用Ubuntu10.04。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1. 安装&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1.1 安装JDK&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;sudo apt-get install sun-java6-jdk&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1.2 安装Ant&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;sudo apt-get install ant-optional&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1.3 安装Hudson&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;sudo apt-get upgrade &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wget -O /tmp/key &lt;a href="http://hudson-ci.org/debian/hudson-ci.org.key"&gt;http://hudson-ci.org/debian/hudson-ci.org.key&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sudo apt-key add /tmp/key&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wget -O /tmp/hudson.deb &lt;a href="http://hudson-ci.org/latest/debian/hudson.deb"&gt;http://hudson-ci.org/latest/debian/hudson.deb&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sudo dpkg --install /tmp/hudson.deb  &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1.4 安装Android SDK &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a title="http://androidappdocs.appspot.com/sdk/index.html" href="http://androidappdocs.appspot.com/sdk/index.html"&gt;http://androidappdocs.appspot.com/sdk/index.html&lt;/a&gt;  &lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2. Project配置 &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2.1 build.xml &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://androidappdocs.appspot.com/guide/developing/other-ide.html"&gt;http://androidappdocs.appspot.com/guide/developing/other-ide.html&lt;/a&gt;  &lt;/p&gt;&#xD;
&lt;p&gt;按照官方的做法，使用自动生成的build文件就可以了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-weight: bold;"&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('6cd68e02-b6fa-45fd-9dc8-301d5cd6ee9c')"&gt;&#xD;
&lt;div id="cnblogs_code_open_6cd68e02-b6fa-45fd-9dc8-301d5cd6ee9c" &gt;&#xD;
&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;xml version="1.0" encoding="UTF-8"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;project &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="test-android"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt; The local.properties file is created and updated by the 'android' tool.&lt;br /&gt;         It contains the path to the SDK. It should *NOT* be checked in in Version&lt;br /&gt;         Control Systems. &lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;property &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;file&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="local.properties"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt; The build.properties file can be created by you and is never touched&lt;br /&gt;         by the 'android' tool. This is the place to change some of the default property values&lt;br /&gt;         used by the Ant rules.&lt;br /&gt;         Here are some properties you may want to change/update:&lt;br /&gt;&lt;br /&gt;         application.package&lt;br /&gt;             the name of your application package as defined in the manifest. Used by the&lt;br /&gt;             'uninstall' rule.&lt;br /&gt;         source.dir&lt;br /&gt;             the name of the source directory. Default is 'src'.&lt;br /&gt;         out.dir&lt;br /&gt;             the name of the output directory. Default is 'bin'.&lt;br /&gt; &lt;br /&gt;         Properties related to the SDK location or the project target should be updated&lt;br /&gt;          using the 'android' tool with the 'update' action.&lt;br /&gt;&lt;br /&gt;         This file is an integral part of the build system for your application and&lt;br /&gt;         should be checked in in Version Control Systems.&lt;br /&gt;   &lt;br /&gt;         &lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;property &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;file&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="build.properties"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt; The default.properties file is created and updated by the 'android' tool, as well&lt;br /&gt;         as ADT.&lt;br /&gt;         This file is an integral part of the build system for your application and&lt;br /&gt;         should be checked in in Version Control Systems. &lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;property &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;file&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="default.properties"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt; Custom Android task to deal with the project target, and import the proper rules.&lt;br /&gt;         This requires ant 1.6.0 or above. &lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;path &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="android.antlibs"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;pathelement &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;path&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="${sdk.dir}/tools/lib/anttasks.jar"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;pathelement &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;path&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="${sdk.dir}/tools/lib/sdklib.jar"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;pathelement &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;path&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="${sdk.dir}/tools/lib/androidprefs.jar"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;pathelement &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;path&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="${sdk.dir}/tools/lib/apkbuilder.jar"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;pathelement &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;path&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="${sdk.dir}/tools/lib/jarutils.jar"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;path&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;taskdef &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="setup"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; classname&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="com.android.ant.SetupTask"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; classpathref&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="android.antlibs"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt; Execute the Android Setup task that will setup some properties specific to the target,&lt;br /&gt;         and import the build rules files.&lt;br /&gt;&lt;br /&gt;         The rules file is imported from&lt;br /&gt;            &amp;lt;SDK&amp;gt;/platforms/&amp;lt;target_platform&amp;gt;/templates/android_rules.xml&lt;br /&gt;&lt;br /&gt;         To customize some build steps for your project:&lt;br /&gt;         - copy the content of the main node &amp;lt;project&amp;gt; from android_rules.xml&lt;br /&gt;         - paste it in this build.xml below the &amp;lt;setup /&amp;gt; task.&lt;br /&gt;         - disable the import by changing the setup task below to &amp;lt;setup import="false" /&amp;gt;&lt;br /&gt;&lt;br /&gt;         This will ensure that the properties are setup correctly but that your customized&lt;br /&gt;         build steps are used.&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;setup &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;project&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-weight: bold;"&gt;2.2 local.properties&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;pre &gt;这个配置文件定义了Android SDK的位置&lt;/pre&gt;&#xD;
&lt;pre &gt;sdk.dir=${tool.android.sdk}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2.3 build.properties&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这个文件里面定义了App的Package，以及生成App签名必须用的一些配置。&lt;/p&gt;&#xD;
&lt;p&gt;application.package=test.android&lt;br /&gt;key.store=../test-android.keystore&lt;br /&gt;key.alias=test-android&lt;br /&gt;key.store.password=password&lt;br /&gt;key.alias.password=password&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3. Hudson配置&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.1 System Configuration&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;系统配置很简单，只需要配置JDK、Ant的位置就可以了。&lt;/p&gt;&#xD;
&lt;p&gt;比较有用的还有一项：E-mail Notification，如果你需要在build失败发送邮件的话，那么需要配置这一项。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.2 Job Configuration&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.2.1 Source Code Management&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1. 选择Subversion，并且设置好SVN的地址以及用户名、密码&lt;/p&gt;&#xD;
&lt;p&gt;2. 把Use update和Revert勾选上&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.2.2 Build Triggers&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1. 勾选上Build Periodically，然后设置自动Build的时机，这里语法跟cron的语法是一样的。&lt;/p&gt;&#xD;
&lt;p&gt;例如：0 2 * * 1-6&lt;/p&gt;&#xD;
&lt;p&gt;2. 勾选上Poll SCM，设置每隔多长时间检测SVN的变更。&lt;/p&gt;&#xD;
&lt;p&gt;例如：0,15,30,45 9-23 * * 1-5&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.2.3 Build&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Step1：删除上次编译的文件&lt;/p&gt;&#xD;
&lt;p&gt;rm &amp;ndash;f test-android.keystore&lt;br /&gt;rm &amp;ndash;f &amp;ndash;R ./test-android/gen&lt;br /&gt;rm &amp;ndash;f &amp;ndash;R ./test-android/bin&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;Step2：生成Keystore&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://androidappdocs.appspot.com/guide/publishing/app-signing.html"&gt;http://androidappdocs.appspot.com/guide/publishing/app-signing.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;例如：keytool -genkey -v -alias test-android -keyalg RSA -keysize 2048 -dname 'CN=xxx, OU=xxx, O=xxx, L=xxx, ST=xxx, C=xx' -validity 10000 -keypass password -storepass password -keystore 'test-android.keystore'&lt;/p&gt;&#xD;
&lt;p&gt;Step3：Invoke Ant&lt;/p&gt;&#xD;
&lt;p&gt;设置Targets：release &amp;ndash;Dsdk.dir=$your-sdk-dir&lt;/p&gt;&#xD;
&lt;p&gt;例如：release &amp;ndash;Dsdk.dir=/home/build/android-sdk-linux&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3.2.3 Post-build　Actions&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1. 勾选上Archive the artifacts，设置Files to archive：test-android/bin/test-android-release.apk&lt;/p&gt;&#xD;
&lt;p&gt;2. 勾选上E-mail Notification，可以设置发送邮件的对象和时机&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;经过以上步骤的设置，大功告成了。&lt;/p&gt;&#xD;
&lt;p&gt;专业就是这么简单！！！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/game-over/aggbug/1898160.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/game-over/archive/2010/12/06/1898160.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/game-over/archive/2010/12/04/1896515.html</id><title type="text">Android开发视频教学资料</title><summary type="text">http://www.verycd.com/topics/2837883/内容很不错的，建议初学者看看啊。</summary><published>2010-12-04T10:28:00Z</published><updated>2010-12-04T10:28:00Z</updated><author><name>Game_over</name><uri>http://www.cnblogs.com/game-over/</uri></author><link rel="alternate" href="http://www.cnblogs.com/game-over/archive/2010/12/04/1896515.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/game-over/archive/2010/12/04/1896515.html"/><content type="html">&lt;p&gt;&lt;a href="http://www.verycd.com/topics/2837883/"&gt;http://www.verycd.com/topics/2837883/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;内容很不错的，建议初学者看看啊。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/game-over/aggbug/1896515.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/game-over/archive/2010/12/04/1896515.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/game-over/archive/2010/06/25/1765544.html</id><title type="text">简约而不简单——Android SimpleAdapter</title><summary type="text">列表(ListView)、表格(GridView)，这在手机应用上面肯定是少不了的，怎样实现比较复杂一点的界面呢，先看一下我的效果图。  这样布局的情况是最基本的，也是最常用的，网上关于这样的布局有多种版本的实现方法，但是有很多需要自己实现Adapter，那样子是比较复杂而且没有必要的，因为我们有简约而不简单的SimpleAdapter。1. ListViewSimpleAdapter的核心代码：...</summary><published>2010-06-25T15:01:00Z</published><updated>2010-06-25T15:01:00Z</updated><author><name>Game_over</name><uri>http://www.cnblogs.com/game-over/</uri></author><link rel="alternate" href="http://www.cnblogs.com/game-over/archive/2010/06/25/1765544.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/game-over/archive/2010/06/25/1765544.html"/><content type="html">&lt;p&gt;列表(ListView)、表格(GridView)，这在手机应用上面肯定是少不了的，怎样实现比较复杂一点的界面呢，先看一下我的效果图。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/game-over/WindowsLiveWriter/AndroidsSimpleAdapter_14037/image_2.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/game-over/WindowsLiveWriter/AndroidsSimpleAdapter_14037/image_thumb.png" width="188" height="244" /&gt;&lt;/a&gt; &lt;a href="http://images.cnblogs.com/cnblogs_com/game-over/WindowsLiveWriter/AndroidsSimpleAdapter_14037/image_4.png"&gt;&lt;img style="display: inline; border-width: 0px;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/game-over/WindowsLiveWriter/AndroidsSimpleAdapter_14037/image_thumb_1.png" width="202" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;这样布局的情况是最基本的，也是最常用的，网上关于这样的布局有多种版本的实现方法，但是有很多需要自己实现Adapter，那样子是比较复杂而且没有必要的，因为我们有简约而不简单的SimpleAdapter。&lt;/p&gt;&#xD;
&lt;p&gt;1. ListView&lt;/p&gt;&#xD;
&lt;p&gt;SimpleAdapter的核心代码：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;for (int i = 0; i &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt; 10; i++) {&#xD;
			Map&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;String&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;Object&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt; map = new HashMap&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;String&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;Object&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;();&#xD;
			map.put("PIC", R.drawable.pic);&#xD;
			map.put("TITLE", "Test Title");&#xD;
			map.put("CONTENT", "Test Content");&#xD;
			contents.add(map);&#xD;
		}&#xD;
		SimpleAdapter adapter = new SimpleAdapter(this,&#xD;
				(List&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Map&lt;/span&gt;&amp;lt;&lt;span style="color: #ff0000;"&gt;String&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;Object&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&amp;gt;) contents, R.layout.listitem,&#xD;
				new String[] { "PIC", "TITLE", "CONTENT" }, new int[] {&#xD;
						R.id.listitem_pic, R.id.listitem_title,&#xD;
						R.id.listitem_content });&#xD;
&#xD;
		listView.setAdapter(adapter);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;listitem的Layout：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;&amp;lt;?xml version="&lt;span style="color: #8b0000;"&gt;1.0&lt;/span&gt;" encoding="&lt;span style="color: #8b0000;"&gt;utf-8&lt;/span&gt;"?&amp;gt;&#xD;
&#xD;
&amp;lt;RelativeLayout xmlns:android="&lt;span style="color: #8b0000;"&gt;http://schemas.android.com/apk/res/android&lt;/span&gt;"&#xD;
	android:layout_width="&lt;span style="color: #8b0000;"&gt;fill_parent&lt;/span&gt;" android:layout_height="&lt;span style="color: #8b0000;"&gt;?android:attr/listPreferredItemHeight&lt;/span&gt;"&amp;gt;&#xD;
	&amp;lt;ImageView android:id="&lt;span style="color: #8b0000;"&gt;@+id/listitem_pic&lt;/span&gt;"&#xD;
		android:layout_width="&lt;span style="color: #8b0000;"&gt;wrap_content&lt;/span&gt;" android:layout_height="&lt;span style="color: #8b0000;"&gt;fill_parent&lt;/span&gt;"&#xD;
		android:layout_alignParentTop="&lt;span style="color: #8b0000;"&gt;true&lt;/span&gt;" android:layout_alignParentBottom="&lt;span style="color: #8b0000;"&gt;true&lt;/span&gt;"&#xD;
		android:src="&lt;span style="color: #8b0000;"&gt;@drawable/pic&lt;/span&gt;" android:adjustViewBounds="&lt;span style="color: #8b0000;"&gt;true&lt;/span&gt;"&#xD;
		android:padding="&lt;span style="color: #8b0000;"&gt;2dip&lt;/span&gt;" /&amp;gt;&#xD;
	&amp;lt;TextView android:id="&lt;span style="color: #8b0000;"&gt;@+id/listitem_title&lt;/span&gt;"&#xD;
		android:layout_width="&lt;span style="color: #8b0000;"&gt;wrap_content&lt;/span&gt;" android:layout_height="&lt;span style="color: #8b0000;"&gt;wrap_content&lt;/span&gt;"&#xD;
		android:layout_toRightOf="&lt;span style="color: #8b0000;"&gt;@+id/listitem_pic&lt;/span&gt;"&#xD;
		android:layout_alignParentRight="&lt;span style="color: #8b0000;"&gt;true&lt;/span&gt;" android:layout_alignParentTop="&lt;span style="color: #8b0000;"&gt;true&lt;/span&gt;"&#xD;
		android:layout_above="&lt;span style="color: #8b0000;"&gt;@+id/listitem_content&lt;/span&gt;"&#xD;
		android:layout_alignWithParentIfMissing="&lt;span style="color: #8b0000;"&gt;true&lt;/span&gt;" android:gravity="&lt;span style="color: #8b0000;"&gt;center_vertical&lt;/span&gt;"&#xD;
		android:text="&lt;span style="color: #8b0000;"&gt;@+id/listitem_title&lt;/span&gt;" android:textSize="&lt;span style="color: #8b0000;"&gt;22px&lt;/span&gt;" /&amp;gt;&#xD;
	&amp;lt;TextView android:id="&lt;span style="color: #8b0000;"&gt;@+id/listitem_content&lt;/span&gt;"&#xD;
		android:layout_width="&lt;span style="color: #8b0000;"&gt;fill_parent&lt;/span&gt;" android:layout_height="&lt;span style="color: #8b0000;"&gt;wrap_content&lt;/span&gt;"&#xD;
		android:layout_toRightOf="&lt;span style="color: #8b0000;"&gt;@+id/listitem_pic&lt;/span&gt;"&#xD;
		android:layout_alignParentBottom="&lt;span style="color: #8b0000;"&gt;true&lt;/span&gt;"&#xD;
		android:layout_alignParentRight="&lt;span style="color: #8b0000;"&gt;true&lt;/span&gt;" android:singleLine="&lt;span style="color: #8b0000;"&gt;true&lt;/span&gt;"&#xD;
		android:ellipsize="&lt;span style="color: #8b0000;"&gt;marquee&lt;/span&gt;" android:text="&lt;span style="color: #8b0000;"&gt;@+id/item_content&lt;/span&gt;"&#xD;
		android:textSize="&lt;span style="color: #8b0000;"&gt;14px&lt;/span&gt;" /&amp;gt;&#xD;
&amp;lt;/RelativeLayout&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2. GridView&lt;/p&gt;&#xD;
&lt;p&gt;SimpleAdapter的核心代码：&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;for (int i = 0; i &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt; 10; i++) {&#xD;
			Map&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;String&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;Object&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt; map = new HashMap&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;String&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;Object&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;();&#xD;
			map.put("PIC", R.drawable.pic);&#xD;
			map.put("TITLE", "Test Title");&#xD;
			contents.add(map);&#xD;
		}&#xD;
		SimpleAdapter adapter = new SimpleAdapter(this,&#xD;
				(List&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Map&lt;/span&gt;&amp;lt;&lt;span style="color: #ff0000;"&gt;String&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;Object&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&amp;gt;) contents, R.layout.griditem,&#xD;
				new String[] { "PIC", "TITLE" }, new int[] { R.id.griditem_pic,&#xD;
						R.id.griditem_title, });&#xD;
&#xD;
		gridView.setAdapter(adapter);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;griditem的Layout： &#xD;
&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;&amp;lt;?xml version="&lt;span style="color: #8b0000;"&gt;1.0&lt;/span&gt;" encoding="&lt;span style="color: #8b0000;"&gt;utf-8&lt;/span&gt;"?&amp;gt;&#xD;
&amp;lt;LinearLayout xmlns:android="&lt;span style="color: #8b0000;"&gt;http://schemas.android.com/apk/res/android&lt;/span&gt;"&#xD;
	android:layout_height="&lt;span style="color: #8b0000;"&gt;fill_parent&lt;/span&gt;" android:layout_width="&lt;span style="color: #8b0000;"&gt;fill_parent&lt;/span&gt;"&#xD;
	android:orientation="&lt;span style="color: #8b0000;"&gt;vertical&lt;/span&gt;"&amp;gt;&#xD;
	&amp;lt;ImageView android:id="&lt;span style="color: #8b0000;"&gt;@+id/griditem_pic&lt;/span&gt;"&#xD;
		android:layout_width="&lt;span style="color: #8b0000;"&gt;wrap_content&lt;/span&gt;" android:layout_height="&lt;span style="color: #8b0000;"&gt;wrap_content&lt;/span&gt;"&#xD;
		android:layout_gravity="&lt;span style="color: #8b0000;"&gt;center_horizontal&lt;/span&gt;"&amp;gt;&#xD;
	&amp;lt;/ImageView&amp;gt;&#xD;
	&amp;lt;TextView android:id="&lt;span style="color: #8b0000;"&gt;@+id/griditem_title&lt;/span&gt;"&#xD;
		android:layout_width="&lt;span style="color: #8b0000;"&gt;wrap_content&lt;/span&gt;" android:layout_height="&lt;span style="color: #8b0000;"&gt;wrap_content&lt;/span&gt;"&#xD;
		android:layout_gravity="&lt;span style="color: #8b0000;"&gt;center_horizontal&lt;/span&gt;" android:text="&lt;span style="color: #8b0000;"&gt;test&lt;/span&gt;"&amp;gt;&#xD;
	&amp;lt;/TextView&amp;gt;&#xD;
&amp;lt;/LinearLayout&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;最后附上代码：&lt;a title="http://files.cnblogs.com/game-over/test.zip" href="http://files.cnblogs.com/game-over/test.zip"&gt;http://files.cnblogs.com/game-over/test.zip&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/game-over/aggbug/1765544.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/game-over/archive/2010/06/25/1765544.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/game-over/archive/2010/05/22/1741411.html</id><title type="text">Android2.2 新特性</title><summary type="text">1. App installation on external storage media 把应用安装在外部存储器（SD卡）http://androidappdocs.appspot.com/guide/appendix/install-location.html2. Data backup 用户数据备份http://androidappdocs.appspot.com/guide/topics/...</summary><published>2010-05-22T02:27:00Z</published><updated>2010-05-22T02:27:00Z</updated><author><name>Game_over</name><uri>http://www.cnblogs.com/game-over/</uri></author><link rel="alternate" href="http://www.cnblogs.com/game-over/archive/2010/05/22/1741411.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/game-over/archive/2010/05/22/1741411.html"/><content type="html">&lt;p&gt;1. App installation on external storage media&amp;nbsp;&amp;nbsp; 把应用安装在外部存储器（SD卡）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://androidappdocs.appspot.com/guide/appendix/install-location.html"&gt;http://androidappdocs.appspot.com/guide/appendix/install-location.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;manifest&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;xmlns&lt;/span&gt;:&lt;span style="color: #ff0000;"&gt;android&lt;/span&gt;=&lt;span style="color: #0000ff;"&gt;"http://schemas.android.com/apk/res/android"&lt;/span&gt;&#xD;
    &lt;span style="color: #ff0000;"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000;"&gt;installLocation&lt;/span&gt;=&lt;span style="color: #0000ff;"&gt;"preferExternal"&lt;/span&gt;&#xD;
    ... &lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2. Data backup&amp;nbsp; 用户数据备份&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://androidappdocs.appspot.com/guide/topics/data/backup.html"&gt;http://androidappdocs.appspot.com/guide/topics/data/backup.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;div&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;manifest&lt;/span&gt; ... &lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;application&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000;"&gt;label&lt;/span&gt;=&lt;span style="color: #0000ff;"&gt;"MyApplication"&lt;/span&gt;&#xD;
                 &lt;span style="color: #ff0000;"&gt;android&lt;/span&gt;:&lt;span style="color: #ff0000;"&gt;backupAgent&lt;/span&gt;=&lt;span style="color: #0000ff;"&gt;"MyBackupAgent"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&#xD;
        &lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;activity&lt;/span&gt; ... &lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&#xD;
            ...&#xD;
        &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;activity&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;application&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&#xD;
&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;manifest&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;3. Graphics 增强了图形处理的功能，特别是3D性能得到大幅度提升&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;New OpenGL ES 2.0 APIs in &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/opengl/GLES20.html"&gt;android.opengl.GLES20&lt;/a&gt;&lt;/code&gt;. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/opengl/ETC1.html"&gt;ETC1&lt;/a&gt;&lt;/code&gt;, &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/opengl/ETC1Util.html"&gt;ETC1Util&lt;/a&gt;&lt;/code&gt;, and &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/opengl/ETC1Util.ETC1Texture.html"&gt;ETC1Util.ETC1Texture&lt;/a&gt;&lt;/code&gt; classes and utility methods for using ETC1 for texture compression. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/graphics/ImageFormat.html"&gt;ImageFormat&lt;/a&gt;&lt;/code&gt; class. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/graphics/YuvImage.html"&gt;YUV image format API&lt;/a&gt;&lt;/code&gt; to enable compression from YUV to JPEG and manipulation of YUV data.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;4. Media&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;New APIs in &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/media/AudioManager.html"&gt;android.media.AudioManager&lt;/a&gt;&lt;/code&gt; for managing audio focus, transport control, transient loss of audio focus, ducking. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New broadcast intent for routing audio to SCO &amp;mdash; &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/media/AudioManager.html#ACTION_SCO_AUDIO_STATE_CHANGED"&gt;ACTION_SCO_AUDIO_STATE_CHANGED&lt;/a&gt;&lt;/code&gt; with extras indicating new state. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New APIs in &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/media/SoundPool.html"&gt;SoundPool&lt;/a&gt;&lt;/code&gt; to detect completion of sound-loading. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New APIs in &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/media/SoundPool.html"&gt;SoundPool&lt;/a&gt;&lt;/code&gt; for auto pause and resume. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New APIs in &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/media/MediaRecorder.html"&gt;MediaRecorder&lt;/a&gt;&lt;/code&gt; for specifying audio settings for number of channels, encoding and sampling rates, sampling rate. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New APIs for adding files to the media database, so that they are automatically scanned. See&lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/media/MediaScannerConnection.html#scanFile(android.content.Context, java.lang.String[], java.lang.String[], android.media.MediaScannerConnection.OnScanCompletedListener)"&gt;MediaScannerConnection.scanFile&lt;/a&gt;&lt;/code&gt; and &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/media/MediaScannerConnection.OnScanCompletedListener.html"&gt;MediaScannerConnection.OnScanCompletedListener&lt;/a&gt;&lt;/code&gt;.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;5. Speech recognition and third-party recognition engines &#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;The platform provides new speech-recognition APIs that allow applications to have a richer interaction with the available voice recognizer. For example, the APIs are sufficient to integrate voice recognition deeply into an IME. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;The platform also provides a &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/speech/RecognitionService.html"&gt;RecognitionService&lt;/a&gt;&lt;/code&gt; base class that lets third-party developers create plug-in recognition engines. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/speech/RecognitionListener.html"&gt;RecognitionListener&lt;/a&gt;&lt;/code&gt; interface to receive callbacks. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/speech/RecognizerIntent.html"&gt;RecognizerIntent&lt;/a&gt;&lt;/code&gt; extras that let a requester app specify details as preferred language, minimum length in milliseconds, and so on.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;6. Camera and camcorder&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Changes to camera preview API to improve efficieny of preview pipeline. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New display orientation for camera (it can now work in portrait orientation). &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New APIs in &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/hardware/Camera.html"&gt;android.hardware.Camera&lt;/a&gt;&lt;/code&gt; for managing zoom level. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New APIs &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/hardware/Camera.Parameters.html"&gt;android.hardware.Camera.Parameters&lt;/a&gt;&lt;/code&gt; for querying and setting device camera settings such as focal length, exposure, zoom level, view angle, and others. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/media/ThumbnailUtils.html"&gt;thumbnail&lt;/a&gt;&lt;/code&gt; utility for video and image thumbnails. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/media/CamcorderProfile.html"&gt;CamcorderProfile&lt;/a&gt;&lt;/code&gt; and &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/media/CamcorderProfile.html"&gt;CamcorderProfile&lt;/a&gt;&lt;/code&gt; classes enable apps to determine device hardware camera capablities. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New support in &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/media/ExifInterface.html"&gt;android.media.ExifInterface&lt;/a&gt;&lt;/code&gt; for retrieving GPS and focal length.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;7. Device policy manager&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;New device policy management APIs allow developers to write "device administrator" applications that can control security features of the device, such as the minimum password strength, data wipe, and so on. Users can select the administrators that are enabled on their devices. For more information, see the &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/app/admin/package-summary.html"&gt;android.app.admin&lt;/a&gt;&lt;/code&gt; classees or the example application code in&lt;a href="http://androidappdocs.appspot.com/resources/samples/ApiDemos/src/com/example/android/apis/app/DeviceAdminSample.html"&gt;DeviceAdminSample.java&lt;/a&gt;. &#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;8. UI Framework&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;New UI modes "car mode" and "night mode" and &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/app/UiModeManager.html"&gt;UiModeManager&lt;/a&gt;&lt;/code&gt; let applications adjust their application UI for specific user modes. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/view/ScaleGestureDetector.html"&gt;ScaleGestureDetector&lt;/a&gt;&lt;/code&gt; that lets Views detect and handle transformation gestures that involve more than one pointer (multitouch) using the supplied MotionEvents. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;Improvements in the way that multitouch events are reported in &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/view/MotionEvent.html"&gt;MotionEvent&lt;/a&gt;&lt;/code&gt; objects. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;The layout attribute &lt;code&gt;fill_parent&lt;/code&gt; is renamed to &lt;code&gt;match_parent&lt;/code&gt;. This affects both XML and Java code (see&lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/view/ViewGroup.LayoutParams.html"&gt;ViewGroup.LayoutParams&lt;/a&gt;&lt;/code&gt;). Note that the platform will continue to honor uses of &lt;code&gt;fill_parent&lt;/code&gt; in legacy applications. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New layout attributes &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/R.attr.html#tabStripEnabled"&gt;tabStripEnabled&lt;/a&gt;&lt;/code&gt;, &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/R.attr.html#tabStripRight"&gt;tabStripRight&lt;/a&gt;&lt;/code&gt;, and &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/R.attr.html#tabStripLeft"&gt;tabStripLeft&lt;/a&gt;&lt;/code&gt; let developers customize the bottom strip of TabWidgets. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;Better support for managed dialogs in Activity.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;9. Accounts and sync&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;New method &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/content/ContentResolver.html#addPeriodicSync(android.accounts.Account, java.lang.String, android.os.Bundle, long)"&gt;AddPeriodicSync()&lt;/a&gt;&lt;/code&gt; lets you schedule a periodic sync with a specific account, authority, and extras at the given frequency.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;10. New manifest elements and attributes&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;For specifying the application's preferred install location (see &lt;a href="http://androidappdocs.appspot.com/#install-loc"&gt;App Installation on External Storage Media&lt;/a&gt;, above): &#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;New &lt;code&gt;android:installLocation&lt;/code&gt; attribute of the &lt;code&gt;&amp;lt;manifest&amp;gt;&lt;/code&gt; element. Specifies the default install location defined by an application.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;For managing user data backup (see &lt;a href="http://androidappdocs.appspot.com/#backup-manager"&gt;Backup manager&lt;/a&gt;, above, for more information): &#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;New &lt;code&gt;android:backupAgent&lt;/code&gt; attribute of the &lt;code&gt;&amp;lt;application&amp;gt;&lt;/code&gt; element. Specifies the component name of the BackupAgent subclass provided by the application to handle backup/restore operations, if any. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;New &lt;code&gt;android:restoreAnyVersion&lt;/code&gt; attribute of the &lt;code&gt;&amp;lt;application&amp;gt;&lt;/code&gt; element. Boolean value that indicates whether the application is prepared to attempt a restore of any backed-up dataset, even if the backup is apparently from a newer version of the application than is currently installed on the device.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;For managing the platform's JIT compiler: &#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;New &lt;code&gt;android:vmSafeMode&lt;/code&gt; attribute of the &lt;code&gt;&amp;lt;application&amp;gt;&lt;/code&gt; element. Boolean value that specifies whether to disable JIT compiler optimizations when running the application.&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;11. Permissions&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&lt;code&gt;android.permission.BIND_DEVICE_ADMIN&lt;/code&gt; &amp;mdash; Any device administration broadcast receiver must require this permission, to ensure that only the system can interact with it. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;&lt;code&gt;android.permission.KILL_BACKGROUND_PROCESSES&lt;/code&gt; &amp;mdash; Allows an application to call&lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/app/ActivityManager.html#killBackgroundProcesses(java.lang.String)"&gt;killBackgroundProcesses(String)&lt;/a&gt;&lt;/code&gt;. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;&lt;code&gt;android.permission.BIND_WALLPAPER&lt;/code&gt; &amp;mdash; Any &lt;code&gt;&lt;a href="http://androidappdocs.appspot.com/reference/android/service/wallpaper/WallpaperService.html"&gt;WallpaperService&lt;/a&gt;&lt;/code&gt; must require this permission, to ensure that only the system can interact with it. &#xD;
&lt;/li&gt;&#xD;
&lt;li&gt;&lt;code&gt;android.permission.SET_TIME&lt;/code&gt; &amp;mdash; Allows an application to set the system time.&lt;/li&gt;&#xD;
&lt;/ul&gt;&lt;img src="http://www.cnblogs.com/game-over/aggbug/1741411.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/game-over/archive/2010/05/22/1741411.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/game-over/archive/2010/01/12/1645867.html</id><title type="text">利用JMeter进行压力测试（3）</title><summary type="text">如何在JMeter中使用外部数据，JMeter也提供了一系列元件，大多包含在配置元件中，例如：CSV Data Set Config，Random Variable，用户定义的变量等，另外，前置处理器 &amp;gt;&amp;gt; 用户参数也可以使用自定义的变量。 我这里着重介绍用户参数和CSV Data Set Config的使用方法。 用户参数可以给测试计划或者测试计划中的每个线程设置参数，如果设置的参数...</summary><published>2010-01-12T12:53:00Z</published><updated>2010-01-12T12:53:00Z</updated><author><name>Game_over</name><uri>http://www.cnblogs.com/game-over/</uri></author><link rel="alternate" href="http://www.cnblogs.com/game-over/archive/2010/01/12/1645867.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/game-over/archive/2010/01/12/1645867.html"/></entry><entry><id>http://www.cnblogs.com/game-over/archive/2010/01/10/1643456.html</id><title type="text">利用JMeter进行压力测试（2）</title><summary type="text">JMeter的中文资料不是很多，我Google了一下，发现基本上没有介绍如何一步步使用的资料。我这里就先整理一下。大概就是以下几个方面：录制脚本 使用用户自定义参数 使用控制器 使用定时器 使用前置后置处理器 使用监听器我也只是入门级别，所以写出来的东西可能比较简单，适合新手参考使用。这次就介绍使用HTTP代理服务器进行脚本的录制。JMeter可以录制脚本，也可使用别的工具，如Badboy录制适合...</summary><published>2010-01-10T04:49:00Z</published><updated>2010-01-10T04:49:00Z</updated><author><name>Game_over</name><uri>http://www.cnblogs.com/game-over/</uri></author><link rel="alternate" href="http://www.cnblogs.com/game-over/archive/2010/01/10/1643456.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/game-over/archive/2010/01/10/1643456.html"/></entry><entry><id>http://www.cnblogs.com/game-over/archive/2010/01/08/1642685.html</id><title type="text">利用JMeter进行压力测试（1）</title><summary type="text">压力测试以软件响应速度为测试目标，尤其是在较短时间内大量并发用户的同时访问时，软件的性能和抗压能力。 JMeter是一款开源的压力测试工具，目前最新Release版本是2.3.4，它不仅可以测试Web服务器，还可以测试数据库、JMS、Web Service、LDAP、JUNIT 等多种对象的测试能力。下载地址：http://jakarta.apache.org/site/downloads/dow...</summary><published>2010-01-08T15:24:00Z</published><updated>2010-01-08T15:24:00Z</updated><author><name>Game_over</name><uri>http://www.cnblogs.com/game-over/</uri></author><link rel="alternate" href="http://www.cnblogs.com/game-over/archive/2010/01/08/1642685.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/game-over/archive/2010/01/08/1642685.html"/></entry><entry><id>http://www.cnblogs.com/game-over/archive/2010/01/01/1637246.html</id><title type="text">Happy New Year!!!</title><summary type="text">Happy New Year!!!</summary><published>2009-12-31T16:10:00Z</published><updated>2009-12-31T16:10:00Z</updated><author><name>Game_over</name><uri>http://www.cnblogs.com/game-over/</uri></author><link rel="alternate" href="http://www.cnblogs.com/game-over/archive/2010/01/01/1637246.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/game-over/archive/2010/01/01/1637246.html"/></entry><entry><id>http://www.cnblogs.com/game-over/archive/2009/08/15/1546580.html</id><title type="text">从零开始学 Django</title><summary type="text">Django的学习笔记，从零开始。以后会慢慢更新。1. Windows环境下Django的安装、配置2. Hello, World!3. URL映射简述4. 模板基础5. 模板继承6. 数据库操作7. 应用&amp;#8212;&amp;#8212;学生管理8. Generic View</summary><published>2009-08-14T19:28:00Z</published><updated>2009-08-14T19:28:00Z</updated><author><name>Game_over</name><uri>http://www.cnblogs.com/game-over/</uri></author><link rel="alternate" href="http://www.cnblogs.com/game-over/archive/2009/08/15/1546580.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/game-over/archive/2009/08/15/1546580.html"/></entry><entry><id>http://www.cnblogs.com/game-over/articles/1546579.html</id><title type="text">Python Web编程（八）</title><summary type="text">Python作为一种动态语言，它的快速开发是Java等动态语言无法比拟的。像Java，想写个Hello，World都得定义Class，main方法，而Python则简简单单一句话就搞定。Django作为Python开发的框架，自然也会有快速开发的特点。Generic View为我们的快速建站提供了支持，下面就简单的介绍一下。在 Python Web编程（七）里面我们做了一个简单的单表的增删改查，我...</summary><published>2009-08-14T19:07:00Z</published><updated>2009-08-14T19:07:00Z</updated><author><name>Game_over</name><uri>http://www.cnblogs.com/game-over/</uri></author><link rel="alternate" href="http://www.cnblogs.com/game-over/articles/1546579.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/game-over/articles/1546579.html"/></entry></feed>
