资讯动态

Android环境搭建与Activity传参实战:从实验报告到避坑指南

发布时间:2026/10/19 2:25:15 来源:尧图企业网站定制
简介这份实验报告面向软件学院修读移动应用软件开发技术课程的学生聚焦Android平台开发入门帮助读者完成从环境搭建到界面设计的完整实践训练。资源包内含1个doc文档大小约1.63MB以文字与截图结合的形式记录实验过程便于对照操作与整理笔记。报告围绕Android系统环境搭建、Activity运用、Android应用UI设计一二等实验项目展开具体涵盖JDK安装与JAVA_HOME环境变量配置、Eclipse与Android SDK的在线及离线安装、ADT插件部署以及Activity生命周期、Intent跳转、TextView与Button等基础控件、LinearLayout与RelativeLayout等布局管理器的使用。内容按实验目的、内容原理、操作步骤与结果验证组织读者可据此掌握Android开发基本流程理解Activity作用与UI构建方法为独立开发简单应用打下基础。目前已有767人学习下载适合作为课程实验参考与期末复习资料。1. 从一份 2013 年的实验报告说起Android 环境搭建与 Activity 传参到底该怎么复现翻到一份软件学院移动应用软件开发技术实验报告时间戳停在 2013 年 6 月实验环境是 Windows 7 加 Eclipse。很多人第一反应是“这都什么年代的东西了”但如果你带过新人、做过移动应用课程设计评审会发现一个反直觉的事实今天大量 Android 入门项目翻车不是死在 Kotlin 协程或者 Compose 状态管理上而是死在环境变量没配对、Activity 没在清单里注册、Intent 传参取不到值这三件事上。这份报告的价值恰恰在于它把 Android 开发最底层的三块骨头——JDK/SDK/ADT 环境搭建、Activity 与 Intent 跳转、UI 布局嵌套——用最原始的方式拆了一遍。它适合两类人一是刚接触 Android、需要一份能照着走通的实验流程的在校生二是需要快速回顾“原始 Android 工程结构长什么样”的从业者。下面我不复述报告原文而是把它当成一个可复现的工程包来拆。2. Android 开发环境搭建JDK、Eclipse、SDK、ADT 四件套的安装顺序与验证2.1 为什么安装顺序不能乱这份实验报告里列的顺序是 JDK → Eclipse → Android SDK → ADT。这个顺序不是随便排的它对应一条硬依赖链Eclipse 本身是 Java 程序没有 JDK 它启动不了ADT 是 Eclipse 的插件没有 Eclipse 它无处安装ADT 安装后需要指向一个已经解压好的 SDK 目录没有 SDK 它配置不生效。所以四者必须按这个顺序来中间任何一步跳过后面都会以“看起来装好了但新建工程报错”的形式还债。常见做法是先把 JDK 装到默认路径再解压 Eclipse 到一个不含中文和空格的目录比如D:\dev\eclipse然后把 SDK 解压到D:\dev\android-sdk-windows最后在 Eclipse 里装 ADT 并指向这个 SDK 路径。注意路径里带中文或空格是新手最容易踩的坑后面会专门讲。2.2 JDK 安装与环境变量配置报告里要求 JDK 6.0 以上配置JAVA_HOME然后写一个test.java验证。这一步的核心不是装 JDK而是让命令行能识别java和javac。配置环境变量的逻辑是JAVA_HOME指向 JDK 安装根目录然后在Path里追加%JAVA_HOME%\bin。这样做的原因是以后如果换 JDK 版本只需要改JAVA_HOME一个地方Path不用动。验证代码如下// test.java public class test { public static void main(String[] args) { System.out.println(JDK install OK); } }编译运行命令javac test.java java test逻辑说明javac负责把.java编译成.classjava负责运行。如果javac提示“不是内部或外部命令”说明Path没配好如果java能运行但报UnsupportedClassVersionError说明编译和运行的 JDK 版本不一致。参数上JAVA_HOME的值必须是 JDK 根目录不能写成bin目录这是高频错误。2.3 Eclipse 与 ADT 插件的安装Eclipse 下载的是 “Eclipse IDE for Java EE Developers” 版本解压即用。ADT 的安装路径是Help - Install New Software在 Location 里填 ADT 的更新地址然后勾选 Developer Tools 一路 Next。安装完成后必须重启 Eclipse否则插件不生效。重启后还有关键一步Windows - Preference - Android在 SDK Location 里填入 SDK 解压路径。这一步不做新建 Android 工程时 Eclipse 会报 “No Android SDK found”。报告里要求截图本质上就是确认这个路径配置成功。2.4 SDK 在线更新与离线安装的取舍SDK Manager 打开后在线更新会列出所有可用的 Platform、Tools、Google APIs。报告里同时给了离线安装方案先解压android-sdk_r16-windows.zip手动建platforms、docs、samples、usb_driver、market_licensing这几个文件夹再把下载好的各个版本 zip 放进去。这里给一个对比表方便判断用哪种方式方式适用场景优点缺点在线更新网络稳定、需要最新组件自动处理依赖下载慢、容易断离线安装网络受限、需要固定版本版本可控、可批量部署需手动建目录、易放错位置离线安装时platforms文件夹下每个版本要解压成独立子目录比如android-8、android-10不能把所有 zip 堆在一起。tools_r06-windows.zip要解压覆盖到 SDK 根目录的tools文件夹。这些细节报告里没展开但实际复现时少做一步就会导致 SDK Manager 识别不到已安装平台。3. Activity 与 Intent 传参从 TestActivity01 到 TestActivity02 的完整实现3.1 Activity 跳转的最小工程结构实验二要求做两个应用TestActivity01 只做跳转TestActivity02 在跳转时把字符串“中国”传过去。这两个实验覆盖了 Activity 最核心的两个能力启动和传参。先看 TestActivity01 的 MainActivity。报告里的代码用了一个 Button点击后startActivity(intent)跳到second。这里有一个容易被忽略的点second这个 Activity 必须在AndroidManifest.xml里注册否则运行时会直接崩报ActivityNotFoundException。报告源码里没贴清单文件但这是必做步骤。// MainActivity.java package com.example.test1; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { Button b; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b (Button) findViewById(R.id.button1); b.setOnClickListener(new OnClickListener() { public void onClick(View v) { // 显式 Intent指定从当前 Activity 跳到 second Intent intent new Intent(MainActivity.this, second.class); startActivity(intent); } }); } }逻辑说明new Intent(MainActivity.this, second.class)是显式 Intent两个参数分别是上下文和目标 Activity 的 Class 对象。startActivity只负责启动不关心目标 Activity 怎么处理。参数上MainActivity.this不能写成this因为在匿名内部类里this指向的是OnClickListener不是 Activity。对应的布局activity_main.xml只放一个 Buttontwo.xml只放一个 TextView。这里不重复贴重点看清单注册!-- AndroidManifest.xml 片段 -- application ... activity android:name.MainActivity intent-filter action android:nameandroid.intent.action.MAIN / category android:nameandroid.intent.category.LAUNCHER / /intent-filter /activity !-- second 必须注册否则跳转崩溃 -- activity android:name.second / /application3.2 用 Bundle 通过 Intent 传递数据TestActivity02 在跳转时多了一步把“中国”放进 Bundle再塞进 Intent。接收端在onCreate里通过getIntent().getExtras()取出 Bundle再读字符串。发送端代码// TextMainActivity.java Intent testintent new Intent(); Bundle testbundle new Bundle(); testbundle.putString(name, 中国); // key 是 name testintent.putExtras(testbundle); testintent.setClass(TextMainActivity.this, test_2.class); startActivity(testintent);接收端代码// test_2.java Bundle tbd this.getIntent().getExtras(); String name tbd.getString(name); // 用同一个 key 取值 test.setText(name);逻辑说明putString和getString的 key 必须完全一致大小写敏感。getExtras()可能返回 null如果发送端没有putExtras接收端直接调用getString会空指针。稳妥写法是先判断tbd ! null。参数上Bundle 支持基本类型、String、Parcelable、Serializable传自定义对象需要实现 Parcelable 或 Serializable这是后续实验的常见扩展点。3.3 两个实验的差异与验证方法TestActivity01 验证的是“能不能跳过去”TestActivity02 验证的是“跳过去之后数据还在不在”。验证方法很简单运行后点击按钮看第二个界面是否显示“中国”。如果不显示按以下顺序排查先确认putString的 key 和getString的 key 一致再确认接收端setText之前没有把 TextView 绑定错最后确认清单里test_2已注册。这里有一个容易混淆的点setClass和构造函数new Intent(this, Class)效果一样报告里两种写法都出现了不是错误只是风格差异。4. UI 布局嵌套与对话框LinearLayout、TableLayout、RelativeLayout 的实战拆解4.1 布局嵌套的分析方法实验三要求实现一个界面最外层纵向 LinearLayout里面依次是横向 LinearLayout四列、TableLayout三行三列、纵向 LinearLayout四行。这种嵌套结构在今天的 ConstraintLayout 时代看起来笨重但它是理解 Android 布局权重和测量机制的最好素材。分析布局时我一般从外往里拆先确定最外层方向再确定每一块的高度和宽度策略最后看layout_weight怎么分配剩余空间。报告里的横向 LinearLayout 用了layout_weight让四个 TextView 等分宽度这是weight最典型的用法。!-- 横向四列等分宽度 -- LinearLayout android:orientationhorizontal android:layout_widthfill_parent android:layout_heightwrap_content android:layout_weight2 TextView android:textred android:gravitycenter android:background#CE0000 android:layout_widthwrap_content android:layout_heightfill_parent android:layout_weight1 / !-- green、blue 同理weight 都为 1 -- /LinearLayout逻辑说明layout_weight的作用是把父容器的剩余空间按权重分配。这里四个子 View 的layout_weight都是 1所以等分。注意layout_width设成wrap_content时weight 分配的是“剩余空间”如果设成0dpweight 直接决定最终宽度后者更符合现代写法。参数上fill_parent和match_parent在旧版本里是同一个意思新版本统一用match_parent。4.2 TableLayout 的三行三列实现TableLayout 的特点是行由TableRow定义列数由最宽的行决定。报告里要求三行三列常见做法是写三个 TableRow每个里面放三个 TextView。如果某一行少放一个表格会自动补空位但不会报错这是容易让人困惑的地方。TableLayout android:layout_widthfill_parent android:layout_heightwrap_content TableRow TextView android:text1 / TextView android:text2 / TextView android:text3 / /TableRow !-- 第二行、第三行同理 -- /TableLayout逻辑说明TableRow 的宽度默认是match_parent子 View 默认wrap_content。如果想让列等宽需要给每个子 View 设layout_weight1并把宽度设成0dp。报告里没提这点但实际做实验时如果列宽不齐就是这里没设。4.3 多输入框对话框与 Toast 输出实验三第二部分要求用 LinearLayout 放两个 TextView 和两个 EditText点击按钮后输出。报告里提到可以用 Toast、TextView 或 Logcat 输出。我一般用 Toast 做即时反馈用 Logcat 做调试记录。// 对话框按钮点击后的输出逻辑 Button okBtn (Button) findViewById(R.id.ok); okBtn.setOnClickListener(new OnClickListener() { public void onClick(View v) { EditText input1 (EditText) findViewById(R.id.input1); EditText input2 (EditText) findViewById(R.id.input2); String text1 input1.getText().toString(); String text2 input2.getText().toString(); // Toast 即时显示 Toast.makeText(MainActivity.this, 输入1 text1 , 输入2 text2, Toast.LENGTH_SHORT).show(); // Logcat 记录方便排查 Log.d(UI_DEMO, input1 text1 , input2 text2); } });逻辑说明getText().toString()是取 EditText 内容的标准写法直接getText()返回的是 Editable不是 String。Toast.makeText的第三个参数是显示时长LENGTH_SHORT和LENGTH_LONG是常量。Log.d的 tag 用统一前缀方便在 Logcat 里过滤。参数上如果 EditText 为空toString()返回空字符串不会崩但业务上通常需要判空。5. 避坑与排查环境搭建和 Activity 传参中最容易翻车的五个点5.1 现象Eclipse 新建 Android 工程时报 “No Android SDK found”原因ADT 安装后没有在 Preference 里配置 SDK Location或者路径填错。解决打开Windows - Preference - Android确认 SDK Location 指向 SDK 根目录且该目录下有platforms和tools文件夹。如果路径正确仍报错检查 SDK 是否解压完整。5.2 现象点击按钮跳转时应用直接崩溃Logcat 报 ActivityNotFoundException原因目标 Activity 没有在AndroidManifest.xml里注册。解决在application标签内添加activity android:name.second /。注意类名前的点号不能丢它表示相对于包名的路径。5.3 现象接收端取到的字符串是 nullTextView 显示空白原因发送端putString的 key 和接收端getString的 key 不一致或者接收端getExtras()返回 null 后直接调用getString。解决统一 key 命名接收端先判空再取值。常见做法是把 key 定义成常量两边引用同一个常量。5.4 现象布局预览正常真机运行后控件位置错乱原因layout_weight和layout_width配合不当或者嵌套层级太深导致测量结果不符合预期。解决把需要按比例分配的子 View 宽度设成0dp只靠layout_weight控制。嵌套层级尽量控制在三层以内超过三层考虑用 RelativeLayout 或 ConstraintLayout 扁平化。5.5 现象离线安装 SDK 后SDK Manager 里看不到已安装的平台原因离线包解压位置不对或者文件夹命名不符合 SDK Manager 的识别规则。解决platforms下每个版本必须是独立子目录目录名格式为android-API级别比如android-8。tools包要解压覆盖到 SDK 根目录的tools文件夹不能放在platforms下。6. 从这份实验报告里能带走的进阶技巧用日志和清单检查替代反复重装这份报告最容易被低估的地方是它把“验证”写进了每一步JDK 要跑 test.javaEclipse 要截图SDK 要截图ADT 要截图。很多人觉得截图是形式主义但实际开发中验证动作本身就是排查手段。我后来带新人时强制要求每配完一个环境变量就跑一次java -version每注册一个 Activity 就先在清单里搜一遍类名每传一次 Intent 就先在发送端和接收端各打一条 Log。具体做法是在发送端startActivity之前打一条Log.d(INTENT_SEND, keyname, value value)在接收端getExtras之后打一条Log.d(INTENT_RECV, bundle tbd)。这样如果传参失败Logcat 里能直接看到是发送端没放进去还是接收端没取出来。这个习惯比反复重装 SDK 高效得多。另一个技巧是清单文件检查。Android 的清单文件是应用的“黑匣子”入口任何 Activity、Service、权限都要在这里声明。我一般会在项目根目录放一个检查清单新建 Activity 后立刻做三件事在清单里注册、在布局里加根节点、在 Java 里覆写onCreate。这三件事做完基本不会出现“跳转崩溃”这类低级问题。还有一个关于布局的教训layout_weight不是万能药。它适合按比例分配空间但不适合精确控制间距。如果实验里要求“四列等宽”用 weight 没问题如果要求“第一列固定 100dp剩下三列等分”就需要把第一列宽度写死后三列用 weight。混用的时候weight 计算的是剩余空间不是总空间这个区别在嵌套布局里会被放大。从那以后我每次复现这类老实验报告都强制走一遍“环境变量验证 → 清单注册检查 → Intent 日志双打 → 布局权重核算”这四步。看起来慢但比装到一半发现 SDK 路径错了再重来快得多。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑