(注意:此文非常非常地过时,只是用于个人回想。请参看《二》以后的笔记)
(20110926:注意!此文由于结构过于混乱且内容过时,将会被删除,用新的学习日记取代——如果我有时间的话)
注:我只是为了学习简单的Android编程和模拟,
所以没有考虑SDK和设备的版本兼容问题。
下面以Android Platform 3.0 API Level 11为例
旧版本的Android Platform可能是不一样。
20110321补充:
关于Android系统的底层操作系统,不在本文的讨论范围之内
(我的理解是,Android平台是由底层的C/C++和应用层的Java应用程序组成)
Android硬件的底层开发可以参考这里:
http://source.android.com/index.html
20110902补充:
开发最好使用Android 2.2,
因为它可以直接利用Manual连接功能(无需重启模拟器)
立刻看到修改代码后的效果。
而且这样做不会有签名改变的问题(无需手动在Settings中卸载程序)。
------------------------
如果手头上有VM而且机器够好的话可以用VM+ubuntu
下面是NGE2提供的较详细的教程
【原创】在Ubuntu中安装andorid开发环境
http://www.iacger.com/forum.php?mod=viewthread&tid=27941
不过NDK似乎很少有机会用。
------------------------
1. 安装JDK(Java SE Development Kit (JDK) Bundles)
http://www.oracle.com/technetwork/java/javase/downloads/index.html
2. 安装Eclipse
安装任意版本的Eclipse皆可。
http://www.eclipse.org/
我使用Eclipse Pulsar(只是个人喜好)。
3. 下载绿色版的Android SDK入门包
(请参考官方文档->Home->Installing the Android SDK)
我下载了官方网站提供的
http://dl.google.com/android/android-sdk_r10-windows.zip
解压到硬盘的某个路径。
(或者下载安装程序进行安装)
这可能不是最新的,最新版本的入门包请参考官方网站的
http://developer.android.com/sdk/index.html
(这个地址可能需要代理才可以访问)
4. 安装Eclipse ADT
(请参考官方文档->SDK->ADT Plugin for Eclipse->ADT 10.0.0)
Eclipse->Help->Install New Software->Add
Name填入adt(或任意名称),
Location填入以下网址,
https://dl-ssl.google.com/android/eclipse/
然后勾选全部搜索到的软件,按提示下载安装ADT插件。
5. 设置Eclipse ADT
(请参考官方文档->SDK->ADT Plugin for Eclipse->ADT 10.0.0)
Window->Preferences->Android->SDK Location:
指定SDK的根目录路径。
6. 更新Android SDK的其它基本组件。
(请参考官方文档->SDK->Adding SDK Components)
上面提到的官网的绿色版Android SDK实际上只是提供SDK更新的基本工具。
用于开发是不够的,需要用Eclipse ADT更新(或者直接执行Android SDK目录下的SDK Manager.exe)。
以Eclipse ADT为例:
Windows->Android SDK and AVD Manager->Installed packages
如果你只是使用官网上的Android的绿色版zip文件来安装,你会看到
列表中只有Android SDK Tools一项。
你可以按Update All...安装最新版本的其它基本组件,
* Tools(上面提到的绿色安装或用安装程序安装的入门包)
* Platform-tools
* SDK Platform
* Documentation(可选)
* Samples(可选)
如果时间充裕,最好全部都安装,
因为文档和示例可以帮助开发者快速查找和参考API的用法,
而不需要访问Android官网。
7. 安装Android虚拟设备(AVD)
(请参考官方文档->Resource->Tutorials->Hello World)
在Eclipse ADT中切换到
Windows->Android SDK and AVD Manager->Virtual devices
按New...弹出Create new Android Virtual Device (AVD)对话框
Name随便填一个名称,如my_avd。
Target下拉选择Android 3.0 - API level 11
目标的版本对应SDK Platform的API版本号11。
因为这里仅用于模拟,所以其它设置用默认值即可。
(请参考官方文档->Dev Guide->Developing->Tools->Emulator)
8. 创建Hello World工程
(请参考官方文档->Resource->Tutorials->Hello World)
File->New->Other->Android->Android Project
Project name:填HelloAndroid
Application name:填Hello, Android
Package name:填com.example.helloandroid
Create Activity:填HelloAndroid
Min SDK Version:填11
如果安装了AVD,Build Target会自动勾选。
然后修改HelloAndroid.java的内容,创建一个TextView。
package com.example.helloandroid; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class HelloAndroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText("Hello, Android"); setContentView(tv); } }
运行它,可以:
工程树->右键->Debug As->Android Application
或者用快捷键Ctrl+F11直接运行模拟器。
模拟器运行有点卡,需要耐心等候和操作。
9. 模拟器参数和解锁问题
(请参考官方文档->Dev Guide->Developing->Tools->Emulator)
如果想缩放模拟器的窗口,
可以打开Debug Configurations对话框(在工具栏的Debug按钮下拉菜单中)
双击创建Android Application,设置Project,
然后在Target->Additional Emulator Command Line Options中
添加-scale 0.8来缩放模拟器的窗口。
(或者按AVD管理器->Virtual devices右面的Start按钮,弹出对话框,
也可以设置缩放比例,只不过那里需要两个参数,而且启动模拟器后可能无法加载当前工程的apk)
Android调试配置对中,Manual可以用于连接上已启动的模拟器,和Automatic不同。
开机后你需要耐心等待(因为模拟器需要一定时间加载操作系统的镜像)。
需要时刻关注Eclipse的Console输出,以了解系统的加载情况和出错原因。
----------------------
重要:
模拟器重启时间较长,如果要省时间,需要把Debug configurations的Automatic改为Manual方式,
选择已启动的模拟器直接安装apk。
这样就可以避免频繁退出模拟器造成的麻烦。
20110909:
这里有个更详细的教程,不过是日文:
http://studiomikan.net/kas/manual/content/hello.html
注意这张图,其实就是想Manual连接到已经运行的模拟器上,以节约时间:
----------------------
如果按下工具栏调试按钮时出现Windows程序崩溃的错误对话框,可以用下面方法逐一尝试:
1. 关闭杀毒软件或者木马扫描程序
2. 删除AVD,重新创建新的AVD再试,并且需要检查Debug configurations对话框中已勾选新创建的AVD。
3. 工具栏->调试按钮下拉->Debug configurations->删除左面树中Android Application下的所有配置,
然后双击Android Application创建新的调试页,指定工程,重新设置参数。
4. 打开任务管理器,结束adb.exe,ADT会在重试N次后重新启动adb,然后再试,
5. 用AVD管理器->Virtual devices右面的Start按钮启动虚拟机(这种办法可能无法加载当前工程的apk),如果要加载工程则要用Debug configurations的Manual方式。
6. (补)或者用命令行启动(见后,13),原理同(5),如果要加载工程则要用Debug configurations的Manual方式。
----------------------
如果系统引导失败或者日志中提示apk安装失败,你需要关闭模拟器重新运行。(补:在我的印象中模拟器脱线是常有的事情,不过多次Manual连接应该可以解决。有时候ADT的logcat也会失败,不过用命令行试又会恢复正常——基本上可以肯定,命令行操作比用ADT要可靠)
如果你看到系统被锁住(出现锁的图片),
可以用鼠标点击开锁图标,然后立刻点圆圈边上的开锁图标,即可开锁。(或者好像真机那样拖动鼠标)
进入系统后,发现程序已经运行起来了。
如果程序没有运行,可以退回系统桌面(按左下角的<图标)
(如果在程序运行时按<后退或退回HOME桌面时,程序实际上没有真正退出,只是休眠)
然后点击右上角的Apps图标,在All列表中单击Hello, Android图标即可运行。
你会看到运行时标题是Hello, Android,
稍等片刻会有Hello, Android的文本输出。
说明程序运行正常。
(如果想旋转模拟器,可以按小键盘的7和9,系统会重启活动并且刷新界面)
直接关闭窗口即可退出模拟器。
---------------------------------
在ADT中使用adb shell:
创建新的External Tools Configuration页,
Location填C:\WINDOWS\system32\cmd.exe
Argument填/C "start adb shell"
(或者用adb的绝对路径)
---------------------------------
如果觉得官方的qemu模拟器太慢,而机器上有其它虚拟机软件,可以试试x86的非官方移植版:
Android x86
它自称可以在x86上跑1.6和2.2系统的Android,
我在VMware workstation上装过,觉得速度比较快,
但操作习惯和官方的qemu有点不同,详细需要参考它的官方介绍。
它貌似还可以用adb调试程序(虽然不知道它对硬件的模拟是否足够)
----------------------------------
10. Eclipse内存问题
我发现有时侯Eclipse会无缘无故地崩溃。
可能是因为内存不足或者Eclipse版本不稳定导致的。
扩充内存的方法是修改eclipse.ini文件
-Xms128m
-Xmx512m
-XX:MaxPermSize=256m
20110909:
详细见官方的文档:
http://source.android.com/source/using-eclipse.html
11. 参考资料
1. Android开发环境搭建全程演示(jdk+eclipse+android sdk)
http://songjg2010.iteye.com/blog/730302
2. Android中文文档(已废)
http://www.chinaup.org/docs/intro/hello-android.html
3. Android SDK开发Android应用
http://quanminchaoren.iteye.com/blog/838883
-----------------
20110909:
package com.example.helloandroid; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class HelloAndroid extends Activity { // Debugging private static final String TAG = "HelloAndroid"; private static final boolean D = true; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { if(D) { Log.d(TAG, "Hello, Android"); } super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText("Hello, Android"); setContentView(tv); } }
@set PATH="C:\WINDOWS" @set PATH="C:\WINDOWS\system32";%PATH% @set PATH="D:\java\apache-ant-1.8.1\bin";%PATH% @set JAVA_HOME="D:\java\jdk1.6.0_20" @set PATH="D:\java\jdk1.6.0_20\bin";%PATH% @set PATH="D:\java\android-sdk_r10-windows\android-sdk-windows\platform-tools";%PATH% @set PATH="D:\java\android-sdk_r10-windows\android-sdk-windows\tools";%PATH% @cd /D "D:\java\android-sdk_r10-windows\android-sdk-windows\work" @cmd
settings->applications->mange
applications-> select the application->select "unistall".
@set NDK_HOME=C:/cygwin/home/Administrator/android-ndk-r5b @set SYSROOT=%NDK_HOME%/platforms/android-8/arch-arm @set GCC=%NDK_HOME%/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-gcc.exe @set GCC="%GCC%" --sysroot="%SYSROOT%" @%GCC% %*
#include <stdio.h> int main(int argc, char *argv[]){ printf("Hello, wolrd!\n"); return 0; }
# cd /data/
# mkdir wmt
# pwd
# cd /data/wmt
# ls -l
# chmod 744 hello
# ./hello
Hello, wolrd!