说句实话,这几年我被人问得最多的开发环境问题,不是Android Studio怎么配,而是“Eclipse还能不能做安卓开发”。我的回答一直很干脆:能做,而且版本配对了,整个流程能跑得很顺畅。我本人从2012年开始用Eclipse写安卓,前后在Windows上完整搭过不下十次开发环境,给同事救过火、给学生讲过课、也帮出版社核过教材。这篇文章就把这套老而弥坚的流程,从JDK开始一直到第一个App跑进模拟器,完整讲清楚,顺便把那些正规文档里根本不会写的版本雷区、高频报错和实操细节,一次抖出来。
如果你正准备维护一个Eclipse老安卓项目,或者照着旧教程学安卓却卡在环境搭建这一步,这篇内容基本能帮你少走两三天弯路。我按“从零到能运行”的自然顺序排列,每一步都包含具体操作和实测过的版本信息,可以放心照做。
1. 环境搭建前的整体思路与版本选型
1.1 为什么还在用Eclipse做安卓开发
先聊聊真实需求。新项目确实早该用Android Studio了,谁要是现在还在新项目里切到Eclipse写安卓,那要么是历史包袱太重,要么是技术选型出了问题。但现实情况是,Eclipse安卓开发环境的需求始终没断过,而且场景相当集中。
第一种是存量老项目维护。很多单位内部使用的数据采集终端、蓝牙配套工具、仓储扫码App、工业控制类应用,都是十年前用Eclipse写的。系统一直跑得好好的,没有致命故障,也没有迁移预算,于是维护就成了长期任务。维护老项目最要紧的不是加新功能,而是能把源码顺利编译成APK,能连真机调试,能修线上反馈的bug。这套需求,Eclipse完全胜任。
第二种是教学场景。大量教材、网课、实验指导书仍然基于Eclipse加ADT插件操作,学生跟着教程一步步做,一旦环境版本不一致,很可能卡在“新建Android项目”这一步就没法继续。我帮高校做过几次校内实训辅导,几乎每次都有同学因为JDK版本太高或Eclipse版本太新,反复报错。反过来,把环境锁定到与教程匹配的版本后,学习进度瞬间就顺畅了。
第三种是旧设备测试。安卓早期的真机,比如2.3到4.4之间的设备,硬件配置和系统限制都摆在那。新工具链编出来的APK在这些旧系统上经常出现安装失败、应用闪退甚至权限不兼容的情况。而Eclipse配合当年的SDK版本,打出来的包在旧设备上的表现更贴合当时系统的运行习惯,兼容性反而更好。
第四种是轻量入门。如果你只想快速看看安卓项目长什么样,理解res目录、AndroidManifest.xml、Activity这些概念之间的关系,Eclipse确实比Android Studio轻得多。启动快,占用内存少,不用等漫长的项目索引过程。所以我的观点很明确:这套环境不是“过时”,而是“场景化适用”,先想清楚自己属于哪个场景,再决定要不要搭。
1.2 核心组件与版本搭配
动手之前,先把整套环境的四个核心成员说清楚,它们是JDK、Eclipse、ADT插件、Android SDK。每个组件各管一摊子事,缺一个环境就跑不通。
用一个做菜的类比来理解:JDK是炉灶,负责生火和加热,也就是Java的编译与运行;Eclipse是操作台,提供切菜、配菜的场所,也就是开发编辑器和管理界面;ADT插件是菜谱系统,告诉操作台该怎么处理“安卓菜式”,让Eclipse看得懂安卓项目的结构;Android SDK是食材库和厨具库,装的是各版本安卓系统的API、打包工具和调试工具。四样东西环环相扣,任何一个链条断了,你做不出菜。
版本搭配是这个流程里最磨人的环节。ADT插件的最终版本停留在23.0.6,它对应的Eclipse主流版本是4.4 Luna和4.5 Mars,对应JDK建议锁定Java 8。我这么多年反复试错后,用得最顺手的一组组合是:
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| JDK | 1.8.0_202 | Java 8最后可免费商用版本,对老插件兼容性好 |
| Eclipse | 4.4 Luna(Java EE版) | 与ADT 23.0.6配合几乎零冲突 |
| ADT插件 | 23.0.6 | 谷歌发布的最一个ADT版本 |
| Android SDK Tools | 24.4.1 | 能管理到API 24以下的所有平台组件 |
| 平台API | 建议装API 16和API 23 | 兼顾老设备与当年的常规适配 |
这个组合我在Win7、Win10、Win11上都实际验证过。还要强调一个特别容易踩的坑:Eclipse分32位和64位,JDK也分32位和64位,两者必须严格一致。怎么判断?在cmd窗口运行java -version,64位JDK通常会多打印一行“64-Bit Server VM”;Eclipse则可以在Help -> About Eclipse看到版本和位数信息。我建议新版系统都直接装64位JDK加64位Eclipse,不要混搭。
2. JDK安装与环境变量配置
2.1 JDK版本选择详解
不少新手习惯装最新版JDK,总觉得越新越稳。但在Eclipse老环境里,这个思路会让你痛不欲生。ADT 23.0.6最后一次更新停留在2015年前后,它熟悉的JDK是7和8。Java 9开始引入模块化系统,对老式插件的类加载机制影响很大,很多Eclipse插件在新版JDK上会出现类找不到、插件加载不完整之类的诡异问题。所以在Eclipse安卓开发场景里,JDK能且只能锁死在1.8,更准确地说,推荐Java SE 8u202。
下载安装具体过程就不展开写外链了。搜索“java se 8u202 download”,找到Windows x64的安装包,双击安装。安装路径我强烈建议设为纯英文短路径,比如C:\Java\jdk1.8.0_202。这不是玄学,老版本Eclipse对路径里的空格、中文支持很差,编译时可能出现资源找不到或者路径截断的怪问题。前期你多花一分钟把路径定好,后期能省一下午排查时间。
安装过程里还有个小细节:向导可能会问你是否安装公共JRE。对Eclipse开发来说,公共JRE不是必须的,但装了也不影响什么,我一般直接保留默认选项,免得某些老的外部工具又找不到运行时环境。
2.2 JAVA_HOME与PATH配置的完整过程
环境变量配置是整个流程里最基础也最容易被忽略的一步。我见过太多人只配了JAVA_HOME,或者Path里的路径写错,结果Eclipse启动时一直提示找不到Java。
操作步骤从入口开始:桌面右键点击“此电脑”,选择“属性”,点击左侧“高级系统设置”,再点击右下角“环境变量”,环境变量编辑面板就弹出来了。这里注意,要在“系统变量”区域操作,而不是“用户变量”,毕竟你希望整套Windows环境都能识别这个JDK。
在系统变量区域点击“新建”,填入:
- 变量名:JAVA_HOME
- 变量值:C:\Java\jdk1.8.0_202
接着在系统变量列表里找到Path,选中并点击“编辑”。在编辑窗口点击右侧“新建”,依次增加两条:
- %JAVA_HOME%\bin
- %JAVA_HOME%\jre\bin
有些Windows版本编辑Path时是文本框形式,那就需要把这两条追加到变量值的最前面,每条后面用英文分号分隔。核心原则是别删掉原有内容,千万别把系统原本的Path清空了,否则系统一堆命令都会失效。
最后再新建一个可选但建议配置的变量CLASSPATH,变量值填写: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
注意最前面那个英文点和分号,不要漏掉。CLASSPATH在Eclipse开发中不算必需品,但老项目里如果使用了命令行ANT脚本或其他外部工具,会读取这个变量。提前配好,省得以后排查类找不到的问题时多一个疑点。所有配置完成后点“确定”保存,关掉所有窗口。
2.3 安装验证与cmd窗口检查
环境变量配置完,必须重新打开一个新的CMD窗口再验证。这个提醒我每次都要说,因为实在太常见了:配置成功却用旧窗口测试,旧窗口不会加载最新环境变量,自然会显示失败。
新开CMD窗口后,输入:
java -version如果看到类似下面的输出,说明JDK正常:
java version "1.8.0_202" Java(TM) SE Runtime Environment (build 1.8.0_202-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)接着再输入:
javac -version正常应该显示javac 1.8.0_202。如果java命令能执行,但javac提示找不到命令,大概率是%JAVA_HOME%\bin没有被Path正确展开,重点检查JAVA_HOME变量名有没有拼错,安装路径有没有填对。
另外可以顺手验证一下变量是否写入成功:
echo %JAVA_HOME%输出结果应该是你的JDK安装路径。如果输出为空,说明变量没保存成功,回去重新填写再确认。这一步虽然简单,但能提前挡住后面百分之八九十的环境问题。
3. Eclipse安装与ADT插件部署
3.1 Eclipse版本选择与安装步骤
Eclipse本身是一个通用IDE,它不认识安卓项目,全靠后面装的ADT插件赋能。所以下载Eclipse时不需要找什么“安卓专用版”,选择Java开发版本就行。
我推荐的版本是Eclipse 4.4 Luna,常见的包有两种:Eclipse IDE for Java Developers和Eclipse IDE for Java EE Developers。两个都包含完整的Java开发工具,区别在于Java EE版多了一些Web开发相关的组件。如果只做安卓,Java Developers版足够;如果后期可能接触Tomcat、JSP之类的内容,Java EE版功能更全面。我因为常年帮人维护多种老项目,习惯用Java EE版,多出来的组件不碍事。
下载回来的包名类似eclipse-java-luna-SR2-win32-x86_64.zip,解压后就能直接使用,不需要安装程序。解压目录建议是D:\eclipse这种简洁英文路径,解压后里面应该能看到eclipse.exe。然后你可以把eclipse.exe右键发送到桌面快捷方式,省得每次进目录找。
首次启动时,Eclipse会弹窗选择workspace工作目录。我建议单独建一个目录,比如D:\AndroidWorkspace,把项目与Eclipse程序目录分开。以后所有安卓项目都放进这个workspace,备份和迁移都非常方便。进入开发界面后,欢迎页可以随手关掉。先别急着建项目,因为ADT还没装,Eclipse还不具备安卓开发能力。
3.2 ADT插件的安装方式与注意点
ADT插件我推荐用本地包方式安装,比在线安装可靠得多。在线安装需要访问官方更新站点,网络状况不好时很容易中断或者解析失败,本地包则不依赖在线下载,一次就能装成功。
先准备ADT-23.0.6.zip文件,注意保持压缩包完整,不需要提前解压。打开Eclipse,菜单栏找到Help -> Install New Software,点击右上角的Add按钮,打开对话框后点击Archive,选中ADT压缩包。Name栏随便填一个,比如ADT,点OK确认。
Eclipse读取压缩包后,会在可用软件列表中显示条目。展开Developer Tools,将它及其所有子项全部勾选。我强调的是“全部勾选”,这一步特别容易漏项。漏掉某些子项后,后续可能无法新建安卓项目,或者右键菜单里根本找不到Android Tools。所以第一次安装我建议直接全选,简单干脆。
点击Next,Eclipse会先解析依赖,随后进入安装预览页。再点Next,接受许可协议,最后点Finish。安装过程要持续几分钟,期间可能弹出一个安全警告,说插件内容未签名,直接点Accept即可,因为这是我们手动下载并检查过的安装包。安装完成后Eclipse会要求重启,确认重启就行。
3.3 报错处理:Failed to find a compatible ADT
重启Eclipse后,如果安装成功,工具栏会多出一个安卓机器人图标,右键菜单里也会出现Android相关的选项。但很多人在这个关头会遇到一个很挫败的提示:Failed to find a compatible ADT,或者干脆无法继续安装。
这个报错的根源绝大多数是Eclipse版本超出ADT的兼容范围。ADT 23.0.6对Eclipse版本的容忍度其实有限,虽然官方说支持Eclipse 3.7以上,但实际操作中,Eclipse 4.6以后经常触发兼容性问题。我的处理顺序是固定的:先看Help -> About Eclipse确认版本号,如果高于4.5,就别挣扎了,直接卸载当前Eclipse,换上4.4 Luna版本,重新安装ADT。
另一个常见原因是eclipse.ini里分配的内存过小。老电脑在加载ADT这种大型插件时会触发内存不足,安装过程莫名其妙失败。解决方法是编辑eclipse.ini,找到-Xmx参数,把它调到512m或更高,比如-Xmx1024m,保存后重启Eclipse再装插件。改完后你会发现整个IDE都流畅不少。
4. Android SDK下载与配置
4.1 通过SDK Manager安装Platform与Build Tools
ADT插件就位后,Eclipse具备了“看懂安卓项目”的能力,但离真正编译APK还差一步——Android SDK。SDK才是实际的编译器、打包器和API资源库。
老版本SDK的目录结构比较直白,核心部分包括platforms、build-tools、platform-tools、tools这几个目录。platforms下面存放不同安卓系统版本对应的平台库,比如android-23对应Android 6.0的接口定义;build-tools里面有编译和打包所需的工具;platform-tools里有adb和fastboot;tools目录里是SDK Manager和模拟器管理工具。理解这些目录的作用,后面碰到的很多报错其实一眼就能看出问题。
如果你拿到的是完整SDK解压包,跳过管理器直接配置路径就行。如果想从零走SDK Manager流程,双击SDK目录下的SDK Manager.exe,界面里会列出不同API版本。我建议至少勾选以下几个组件:
- Android SDK Platform-tools
- Android SDK Build-tools,选择23.0.3这一档
- SDK Platform - Android 6.0(API 23)
- SDK Platform - Android 4.0.3(API 15)或更低版本的老平台包
勾选完成后点Install Packages,同意所有许可协议,然后开始下载。这个过程很长,网络不佳时更是折磨。所以实际部署中我反而更常用“手动补文件”的做法,这个在第6章会详细讲,这里先记住一个结论:SDK不一定非要在Manager里逐项下载,手动放目录也能被识别。
4.2 在Eclipse中关联Android SDK
SDK准备齐全后,关键操作是把SDK路径告诉Eclipse。在Eclipse菜单里选择Window -> Preferences,左侧点开Android节点,右侧会看到SDK Location文本框。点击Browse选择SDK根目录,比如D:\AndroidSDK。
点击Apply后,Eclipse会扫描SDK根目录下的platforms文件夹,在下方列出已经安装的API版本。如果一切正常,关掉Preferences窗口,Eclipse里通常会出现一个安卓机器人视图。看到这个视图,说明ADT和SDK已经成功对接,环境就基本立起来了。
如果窗口提示“No Android SDK found at this location”,先不要瞎猜,按顺序排查三个点:一是SDK目录是否真的包含platforms文件夹,并且里面至少有一个android-xx子目录;二是选目录时是否选到了SDK根目录,而不是误选了platforms子目录;三是路径是否含有中文或空格。老版本Eclipse对带空格或中文的SDK路径识别确实有Bug,遇到就别犹豫,直接把SDK换个英文路径。
4.3 创建AVD模拟器
模拟器是开发流程里的重要一环,尤其在没有真机的时候。创建AVD的入口在Eclipse工具栏,找到安卓机器人图标旁边的手机小图标,或者通过Window -> Android Virtual Device Manager打开。
点击New,AVD Name可以取Nexus4_API23这种便于识别的名称。Device选择屏幕尺寸,可以选Nexus 4或Nexus 5的预设。Target必须选择你已经安装的API版本,比如API 23。CPU/ABI这个选项是关键,建议选x86,同时确保本机已安装并启用了Intel HAXM加速驱动。ARM ABI的模拟器在Windows x86环境下运行极其缓慢,启动一次可能要十几分钟,体验糟糕到让人怀疑人生,尽量避免。
AVD创建完后,选中它点击Start。弹出窗口里有个“Launch from snapshot”选项,如果你保存过快照,下次启动会快很多。第一次启动没有快照,只能耐心等待。当模拟器慢慢显示出桌面界面,看到老版本安卓的虚拟按键,那一瞬间你会觉得前面所有折腾都值了。
5. 第一个安卓项目的创建与运行
5.1 新建Android Application Project
环境搭建完成,终于可以跑一个新项目试试。在Eclipse菜单栏选File -> New -> Project,弹出向导后在Android目录下选择Android Application Project,点Next。
先填写几个基础参数。Application Name是应用显示名称,比如“第一个应用”;Project Name是Eclipse工程名,保持默认或者和Application Name保持一致;Package Name是应用包名,必须遵循Java包命名规范,此处可以填com.example.demo。包名不是随便填填就完事,它会在代码库和签名中持续存在,后面再想改非常麻烦,所以第一次设置时最好认真想一下。
点击Next进入后续配置页。这里有三项关键参数:Minimum Required SDK(最小支持版本)、Target SDK(目标版本)、Compile With(编译版本)。我的建议是Min SDK选API 10或API 16,Target SDK和Compile With都选API 23。要注意,这三项的值都必须在你已安装的platforms范围之内,否则Eclipse会报出找不到平台或编译目标无效的错误。
继续勾选Create custom launcher icon和Create activity,在Activity模板里选BlankActivity,点Finish。Eclipse会花上一段时间生成项目并执行首次构建。构建结束后,左侧Package Explorer里会出现完整的安卓项目树。如果项目名左上角出现红色叉号,说明项目带编译错误,先到Problems视图看具体提示,多半是SDK版本或JDK版本不匹配,结合前面的环境配置慢慢排查。
5.2 项目结构核心目录解读
新项目建立后,Eclipse安卓项目的目录结构是每个开发者都必须熟悉的。首当其冲的是src目录,它保存全部Java源码,你写的Activity和其他Java类都在这里。gen目录是自动生成的代码区,R.java就在这里,它由资源文件自动生成,用来在Java代码中引用资源,千万不要手动修改,改坏了一编译就全盘报错。
assets目录用来放任意格式的原始文件,可以放游戏数据包、配置文件等,访问它需要用AssetManager,与普通资源目录有区别。res目录是资源大本营,下面还有多个子目录:layout存放界面布局的XML文件,drawable存放图片和自定义形状资源,values存放字符串、颜色、尺寸等配置,menu存放菜单XML。学习安卓开发,先把res目录的结构弄清楚,基本上项目就不迷路了。
还有一个必须认识的文件是AndroidManifest.xml,它是应用的“身份证”和“说明书”,声明了包名、权限、启动Activity、组件信息等。模板创建时已经自动注册了MainActivity,如果你复制粘贴写了一个新Activity却忘了在这里注册,运行时就会报找不到类的错误。所以遇到莫名其妙的崩溃,先来这个文件里翻一翻。
项目根目录下还有project.properties文件,里面有一行target=android-23,标记最终编译目标。日后如果需要更换编译目标版本,可以直接改这个文件,也可以在项目上右键选择Properties里的Project Build Target来调整,两种方式效果一样,看个人习惯。
5.3 编译打包APK的完整流程
Eclipse安卓项目打包最简单的动作是右键项目,选择Run As -> Android Application。ADT会依次完成Java源码编译、class文件转成Dalvik字节码、资源合并、APK打包、调试签名,最后安装到选定的模拟器或真机上并自动启动。这个过程自动化程度很高,中间任何一步断了都会弹出错误提示。
如果运行时出现“No compatible targets found”,说明Eclipse没找到可用的模拟器或设备。先回AVD Manager确认模拟器已经创建,或者检查真机是否被adb识别。模拟器没启动,或者真机的USB调试授权被拒绝,都可能触发这个提示。实际上这种报错绝大多数是环境问题而不是代码问题,别慌,逐项检查就行。
发布版本打包的路径不同:右键项目,选择Android Tools -> Export Signed Application Package,按向导创建或指定一个Keystore密码库,填写别名和密码,最后选择APK输出路径。这里必须提醒一句:Keystore文件和密码务必做好备份,放到安全的地方。一旦丢失,以后就只能换签名重新发布,老用户无法直接升级,数据绑定和授权信息全部失效。我见过最惨的案例是有人把Keystore放在临时机器的桌面,机器坏了,项目再也没法更新,教训非常惨痛。
6. 常见问题与排查技巧实录
6.1 模拟器启动黑屏
模拟器黑屏应该是Eclipse时代被问得最多的问题。先明确一个事实:第一次启动黑屏是正常的,特别是ARM镜像,冷启动可能要几分钟甚至十分钟。如果等待超过十五分钟还没有反应,再开始查问题。
第一步排查CPU虚拟化是否开启。需要在BIOS里打开VT-x或AMD-V,同时安装Intel HAXM加速驱动。HAXM安装程序一般在SDK目录的extras\intel\Hardware_Accelerated_Execution_Manager下,文件名类似intelhaxm-android.exe,运行安装即可。不装HAXM的话,x86模拟器要么拒绝启动,要么慢到无法接受。
第二步检查AVD的内存设置。默认RAM通常只有512MB,模拟器加载系统镜像时内存不足也会导致黑屏或闪退。建议改成1024MB,如果电脑内存充足就上2048MB。第三步看AVD的ABI选项,选了ARM的话,建议改成x86再试。如果以上都无效,最干脆的方案是改用真机调试,省时省力,老模拟器里的问题让模拟器自己慢慢想办法吧。
6.2 SDK下载速度慢
SDK Manager在线下载慢,是当年人人头疼的问题。我的土办法一直很管用:不依赖SDK Manager在线下载,而是手动补文件。
具体操作是:先从第三方软件源或朋友拷来对应版本的platform包和build-tools压缩包,比如platform-android-23.zip,解压后手动放到SDK根目录对应位置。把android-23文件夹放进platforms目录,build-tools解压到build-tools目录。这里最关键的细节是文件夹命名必须和官方完全一致,大小写、命名规则都不能差,Eclipse和SDK Manager才能顺利识别。放好之后回到SDK Manager界面,点右上角刷新按钮,新内容就会出现在列表里。这个方法虽然“土”,但对网络条件不理想的场景特别管用,我在好几台新电脑上都是靠它快速恢复环境的。
6.3 adb连不上设备
真机调试时,adb识别不到设备是高频问题。处理顺序从最基础的开始:确认设备开发者选项里的USB调试已经开启,第二次连接时手机屏幕会弹出授权确认框,点允许。然后在命令行执行adb devices,如果能看到设备但状态显示“unauthorized”,那就在手机上重新点授权,不行就拔掉USB线再插,重新弹窗。
如果命令里完全看不到设备,那就转到设备管理器,检查USB驱动是否正常加载。老设备尤其需要对应的OEM USB驱动,驱动不对设备会被识别成其他类别或者未知设备。还有一点容易被忽略:USB线本身可能是充电线而不是数据线,主板上的USB端口也有兼容性问题,换线、换口都值得一试。
另外一个Eclipse时代特有的坑:DDMS调试服务会和命令行adb打架,互相抢占端口,导致某一侧的adb devices列表为空。解决办法是先关闭Eclipse,在cmd里执行:
adb kill-server adb start-server adb devices确认设备列出来之后,再打开Eclipse使用。本质上是两个adb服务在抢地址,分开启动就正常了。
6.4 Conversion to Dalvik format failed错误
“Conversion to Dalvik format failed with error 1”是Eclipse安卓开发中最著名的报错之一。遇到它时,大多数人第一反应是查代码,但其实这个错误几乎都是构建链路的问题。
我的排查流程是固定的。第一步,打开项目Properties里的Java Build Path,看Libraries列表有没有重复引用的jar包,或者引用了一个已经被删除的依赖。第二步,右键项目,执行Project -> Clean,然后手动进项目目录删除bin和gen文件夹,让Eclipse重新构建一次。第三步,检查Project Build Target是不是和项目要求一致,不一致就调整成正确目标再试。
如果以上三步都没解决,最后的大招是新建一个空白安卓项目,把src和res原样复制过去,再重新添加jar引用。老Eclipse对某些混合的jar包非常敏感,重建项目相当于给它一个全新的工作环境,问题往往就此消失。这个方法看起来粗暴,但在老环境里成功率极高。
6.5 中文乱码问题
Windows中文环境里,Eclipse有两个常见的乱码场景。一个是Java源文件里的中文注释变成一片“锟斤拷”,另一个是控制台打印的中文日志乱码。
源文件乱码的原因,绝大多数是编码不一致。文件本身是GBK编码,Eclipse默认按UTF-8打开,于是中文全部变成乱码。解决方法是进入Window -> Preferences -> General -> Content Types,找到Text类别下的Java Source File,在Default encoding里填写与源文件实际编码一致的值,GBK或UTF-8都有可能,改完后Eclipse会提示重新打开所有文件,确认即可。
控制台乱码的解决方式略有不同:右键运行配置,在Run Configurations里的Common页面找到Console Encoding,设置成项目一致的编码,通常也是GBK或UTF-8二选一。这个设置对老项目很实用,尤其是那些还在代码里大量输出中文日志的系统。顺手提一句,如果你用Ctrl+Shift+F执行格式化代码,最好先确认编码正确,否则格式化操作可能把中文注释搞得更乱。
6.6 使用DDMS查看日志与调试
Eclipse时代调试安卓应用,离不开DDMS和Logcat。DDMS全称Dalvik Debug Monitor Server,它是ADT内置的调试监视服务,可以在Eclipse的DDMS透视图中打开。
在Window -> Open Perspective -> Other里选择DDMS,打开后能看到左侧的设备列表,那一串串包名对应的进程可以展开。顶部有几个关键入口,比如模拟器截图、线程状态、堆内存查看等。日常开发最常用的还是Logcat面板,它实时输出设备上所有进程的日志,可以通过包名或日志标签过滤。调试崩溃问题时,在Logcat里搜索那串红色错误,往上看堆栈信息,定位到具体源码行,效率非常高。
还有一个调试技巧:在Eclipse的Java源码里双击行号左侧,即可设置断点。右键项目并选择Debug As -> Android Application,应用会以调试模式运行,走到断点处暂停。这时可以用变量视图查看各变量的当前值,用逐步执行按钮逐行跟踪代码。虽然速度比不上现在的新工具,但在老环境里已经足够准确好用。我调试老项目时基本都靠这个手段,很多逻辑问题都是这么一步步翻出来的。
7. 老环境的维护心得与备份方法
7.1 环境快照与快速恢复
搭Eclipse安卓环境这件事,技术难度确实不高,真正折磨人的是版本和顺序。版本锁对了,顺序走对了,整个过程可以一气呵成。我见过有人搭环境搭了整整一周还在报错,最后发现原因就是Eclipse用了最新版、JDK用了最新版、SDK混搭了一套新组件,三样东西互相不认。如果你愿意在版本选择上稍微“复古”一点,这套流程就会变得非常温顺。
所以我自己养成了一个保命习惯:每次搭好一个可用的Eclipse安卓环境,立刻把JDK安装包、Eclipse压缩包、ADT插件包,以及已经配置好的SDK目录,全部压缩成一份备份,单独存放在移动硬盘或云盘里。以后不管是换电脑还是帮同事重建环境,直接解压恢复,半小时就能回到完全可用的状态。这个方法简单到极点,但在关键时刻比任何网络教程都管用。
7.2 一个版本锁定与依赖管理的建议
另外补充一个容易踩坑的细节:老项目里如果引用了第三方jar包,最好把jar文件的版本也锁定起来。安卓老时代,很多第三方库并没有托管在统一仓库里,你手动添加一个jar进去,当时管用,过两年再搭环境时可能连下载链接都找不到了。所以我会把项目用到的jar包连同SDK一起放进备份目录,并把版本号写在项目说明文件里。这样做的好处很直接:无论过多久,只要还有这套备份,项目就能在任何一台新电脑上重新构建起来。
从经验上讲,Eclipse安卓开发环境的搭建本身没有任何“魔法”,它考验的是细心和版本管理意识。愿意花十分钟把版本梳理清楚的人,后面就不会被环境问题折腾到怀疑人生。这套知识虽然老了,但对维护老项目、看老教程、接触老设备的人来说,依然是实打实的救命技能。
我个人的习惯是每次搭建完环境,都顺手在workspace外写一个简短的部署记录,记下JDK版本、Eclipse版本、ADT版本、SDK组件清单和几个特殊配置项。这个记录文件也就几十行,但每次换机器时,它比任何记忆都可靠。如果你也经常跟老项目打交道,强烈建议你也做一份这样的“环境快照”,省下的时间绝对超出你的预期。