Android开发入门






4.75/5 (8投票s)
文章 #3 - 在Eclipse中创建Hello World Android应用程序
引言
在本文中,我们将创建一个简单的 “Hello World” Android 应用程序。我们将使用 Eclipse 在创建新 Android 应用时提供的默认模板,并且还会检查创建的文件。我将简要介绍每个步骤,您将对如何开始开发应用程序有一个清晰的认识。要开发 Android 应用程序,您需要 Android SDK 以及平台工具和开发环境。在本教程中,我将使用 Eclipse IDE 来创建应用程序。要下载工具和配置您的开发环境,请访问 Android Developer 网站并下载 ADT Bundle。安装完所有工具后,您就可以继续了。您还需要具备 Java 基础知识,并在您的计算机上安装最新的 Java SDK。
创建项目
启动 Eclipse IDE。点击 File –> New –> Project。在打开的窗口中,如图所示,展开 Android 文件夹并选择 “Android Application Project”,然后点击 Next
在接下来出现的 New Android Application Dialog 对话框中,我们设置应用程序的详细信息。填写信息,如图所示,然后点击 Next
以下是关于各个字段含义的简要说明:
Application Name: 这是 Android 应用程序的名称,将在 Play 商店中显示。
Project Name: 在 Eclipse 工作空间中显示的工程名称。您会注意到,当您输入应用程序名称时,工程名称会自动填充。通常,您可以为工程和应用程序使用相同的名称,但这并非强制要求。
Package Name: 这指定了您应用程序的命名空间,并且必须是唯一的,因为 Play 商店中不能部署两个具有相同命名空间的应用程序。通常的做法是使用您的反向域名作为包名。在本例中,我们将保留默认设置。
Minimum Required SDK: 指定了我们的应用程序支持的最低 Android 版本。我们将其保留为 API 8,因为仍有许多设备运行较旧的 Android 版本。
Target SDK: 指定了您已测试过应用程序的最高 Android API 版本。最佳实践是始终针对最新版本测试您的应用程序,以避免任何兼容性问题。
Compile With: 这是将编译应用程序的版本。您应该始终针对可用的最新 Android 版本来编译您的应用程序。
Theme: 指定将应用于应用程序的样式。保留默认值。
在出现的 Configure Project 屏幕中,保留默认选项,如图所示,然后点击 Next
在这里,我们指定是否要创建自定义启动图标和活动。我们还指定了项目文件将存储的路径。
下一个屏幕允许您为应用程序创建自定义启动图标。您也可以使用自定义图像。它还会为所有不同的屏幕密度生成图标。目前,我们保留默认设置并点击 Next
在 Create Activity 屏幕中,我们将选择 “Blank Activity” 并点击 Next
Activity 是 Android 应用程序的用户界面层。它包含所有 UI 元素,并提供了一个用户可以与之交互的前端。通常,Android 应用程序包含多个 Activity。
在下一个屏幕中,我们提供有关空白活动(如名称和布局名称)的详细信息。保留默认设置并点击 “Finish”
点击 Finish 后,Eclipse 将创建项目,并将其加载到工作空间中。如图所示,这是项目加载后 Eclipse 的样子。左侧是 “Package Explorer”,可用于查看和导航应用程序的各种文件/文件夹。
让我们仔细看看我们的 Android 应用程序的文件夹结构,我将解释不同类型的文件夹和文件。
-
src : 此文件夹包含我们项目的源代码。它包含一个名为 MainActivity.java 的文件,该文件是在通过向导创建新活动时创建的。
-
gen : 此文件夹包含生成的文件,这些文件是由
-
assets : 此文件夹目前为空,但您可以将其用于放置外部资源,如 数据库、声音文件等
-
libs : 此文件夹包含您的项目使用的任何库或外部库。
-
res : 此文件夹包含应用程序使用的资源。它还包含各种不同的文件夹。让我们看看它们。
-
drawable : drawable 是可以通过 activity 绘制到屏幕上的内容。这包括图标、图像、动画等。我们的项目中共有 5 个不同的文件夹,代表不同的屏幕密度:低、中、高、超高、超超高。您会注意到文件夹中存在一个名为 “ic_launcher.png” 的文件。这是我们在创建项目时创建的自定义启动图标。使用这些文件夹,您可以提供不同的自定义图形,这些图形将根据运行您应用程序的设备的类型进行显示。您的 “drawable-ldpi” 文件夹中的图形应针对低分辨率设备进行优化,而 “drawable-xxhdpi” 文件夹中的图形应针对高清手机和平板电脑进行优化。
-
layout : 此文件夹包含我们 activity 的布局 XML 文件。Activity 中的 UI 组件在 XML 文件中定义。对于项目中的每个 activity,都会有一个相应的布局文件。
-
menu : 它包含定义 activity 菜单结构的 XML 文件。
-
values : 这些文件夹包含 “strings.xml”、“dimen.xml”、“styles.xml” 文件,用于存储字符串、尺寸和样式的常量值。将所有常量放在这些文件中允许它们从任何地方访问。这在本地化过程中也很有帮助。
-
Android 中的 UI 布局
Android 中的所有布局都在 XML 文件中定义。让我们打开布局文件夹中的 “activity_main.xml” 文件,看看它是如何设计的。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>
第一个标签是 <RelativeLayout> 标签,它定义了容纳 activity UI 组件的布局容器。在 RelativeLayout 中,UI 元素是相对于彼此放置的。还有其他类型的布局,如 LinearLayout、TableLayout 也可以使用。该标签还包含其他元素,如 “android:layout_width”、“android:layout_height” 等,用于指定布局的宽度和高度。还有像 paddingLeft、paddingBottom 这样的不同功能也可以指定。
宽度和高度的 “match_parent” 值允许 RelativeLayout 扩展并占据设备的整个屏幕。在布局内部,我们有一个 <TextView> 标签,它类似于其他语言中的标签控件。此控件用于在屏幕上显示 “Hello World” 文本。要显示 TextView 中的文本,我们使用 “android:text=”@string/hello_world”。“@string/hello_world” 指定我们正在从包含键 “hello_world” 的 “strings.xml” 文件中选择一个值,而不是在此处硬编码该值。如果打开 values 文件夹中的 strings.xml,您将看到以下代码:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Hello World App</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> </resources>
在我们的 TextView 中,“@string/hello_world” 文本将被 strings.xml 文件中指定的 “Hello world!” 值替换。要更改值,您可以更新 strings.xml 文件,它将反映在 UI 中。同样,我们还使用 “@dimen/activity_vertical_margin” 和 dimen.xml 文件中指定的其他常量来指定。
R 文件
在 Eclipse 的 Package Explorer 中右键单击 “HelloWorldApp” 项目,然后单击 “Build Project”。项目成功构建后,您将在 gen folder –> com.example.helloworldapp 命名空间下找到一个 R.java 文件。双击该文件打开它,它将包含以下代码:
public final class R { public static final class attr { } public static final class dimen { /** Default screen margins, per the Android Design guidelines. Customize dimensions originally defined in res/values/dimens.xml (such as screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here. */ public static final int activity_horizontal_margin=0x7f040000; public static final int activity_vertical_margin=0x7f040001; } public static final class drawable { public static final int ic_launcher=0x7f020000; } public static final class id { public static final int action_settings=0x7f080000; } public static final class layout { public static final int activity_main=0x7f030000; } public static final class menu { public static final int main=0x7f070000; } public static final class string { public static final int action_settings=0x7f050001; public static final int app_name=0x7f050000; public static final int hello_world=0x7f050002; } public static final class style { /** Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices. Theme customizations available in newer API levels can go in res/values-vXX/styles.xml, while customizations related to backward-compatibility can go here. Base application theme for API 11+. This theme completely replaces AppBaseTheme from res/values/styles.xml on API 11+ devices. API 11 theme customizations can go here. Base application theme for API 14+. This theme completely replaces AppBaseTheme from BOTH res/values/styles.xml and res/values-v11/styles.xml on API 14+ devices. API 14 theme customizations can go here. */ public static final int AppBaseTheme=0x7f060000; /** Application theme. All customizations that are NOT specific to a particular API-level can go here. */ public static final int AppTheme=0x7f060001; } }
R.java 是一个自动生成的文件,其中包含我们应用程序中各种资源(布局、drawable、string 等)的 ID。它通过我们的代码提供对所有这些资源的访问。从代码中可以看出,它包含各种资源的静态类,这些类包含特定的元素。由于此文件是自动生成的,因此我们不应对其进行任何更改。
现在让我们看一下 Android Java 代码。打开 src 文件夹中的 MainActivity.java 文件,它将包含如下代码:
package com.example.helloworldapp; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
顶部有三个导入语句。我们的 MainActivity 类扩展了我们已导入的 android.app.Activity 类中的 Activity 类。我们所有的 activity 都需要扩展 Activity 超类。
在类内部,我们有一个 OnCreate() 方法,负责创建 activity 的 UI。还会将一个 savedInstanceState Bundle 对象传递给该方法,该对象包含 activity 中 UI 元素的设置。在该函数内,我们使用 super 关键字调用超类的 onCreate() 方法。之后,setContentView(R.layout.activity_main) 设置 activity 的布局。您可以注意到我们是通过 R 关键字传递我们的布局的。这将加载我们 XML 文件的布局。
另一个方法 onCreateOptionsMenu() 为该 activity 创建了选项菜单。
App Manifest 文件
您创建的每个 Android 应用程序都有一个名为 AndroidManifest.xml 的应用程序清单文件。它包含有关应用程序的信息,如包名、应用程序名、版本等。您的应用程序所需的所有权限也包含在清单中。所有 activity、内容提供者等也在文件中定义。您可以在下方查看内容:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.helloworldapp" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.helloworldapp.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
正如您所见,它列出了应用程序中的 activity。文件中的 <intent-filter> 指定该 activity 是主 activity,并且在应用程序启动时应该启动它。它还指定了应用程序所需的最少 SDK 版本。
配置模拟器
现在是时候在模拟器中测试我们的应用程序了。模拟器模仿了智能手机或平板电脑的功能。在 Eclipse 中,转到 Window –> Android Virtual Device Manager。这将打开 Android Virtual Device Manager 对话框,其中列出了您已创建的所有模拟器。由于目前我们没有任何模拟器,它会显示“No AVD available”。
要创建新模拟器,请单击 “Create” 按钮打开 Create Emulator Dialog。在 AVD name 中,为模拟器提供一个名称。在 Device 字段中,选择 Nexus S 和其他选项,如图所示:
您还可以配置各种选项,如内存、皮肤、前置摄像头、RAM 等。填写完信息后,单击 Create 按钮,模拟器将创建并列在 AVD manager 页面中。您可以选择模拟器并单击 “Start” 来运行它。
要在模拟器中运行我们的应用程序,请右键单击 HelloWorldApp –> Run As –> Android Application。
模拟器将启动,应用程序也将启动。
虽然您可以在模拟器中测试您的应用程序,但在发布之前最好在实际设备上进行测试。
在实际设备上调试
要在真实设备上运行和调试您的应用程序,您需要在设备上启用 USB 调试。在早期版本的 Android 中,您可以在 Settings –> Applications –> Development 下找到选项。在 Android 4.0 及更新版本中,它可在 Settings –> Developer Options 下找到。
在 Android 4.2 及更新版本中,Developer Options 是隐藏的。转到 Settings –> About Phone 并点击 Build Number 7 次使其可见。
进入 Developer Options 后,勾选 Android debugging 选项,如图所示。
您还需要安装 Google USB Drivers。打开 SDK manager 并选择 Google USB driver 并安装它。
安装完驱动程序后,使用 USB 线将手机连接到计算机。
打开 device manager 并检查它是否正在显示。选择您的手机并单击 “Update Driver Software” 选项。
在打开的对话框中,选择 “Browse My Computer for driver software”,当它要求提供文件路径时,输入文件路径为 “F:\android-sdk\extras\google\usb_driver”。根据您安装 Android SDK 的位置,这可能会有所不同。系统将询问您是否要更新驱动程序。
单击 install。完成后,您将在 Device Manager 中的 Android phone 下看到列表。
现在我们已准备好在我们的 Android 手机上运行我们的应用程序。右键单击 HelloWorldApp 项目,然后单击 Run As –> Android Application。现在系统将显示一个选项,让您在手机和模拟器之间进行选择,如图所示:
选择您连接的手机并单击 OK。然后应用程序将安装在您的手机上并执行。这对于在真实手机上测试和调试应用程序非常有用。您可以检查手机中的应用程序,并且会发现 “Hello World App” 也可见。图标是我们在创建项目时选择的那个。
创建 APK 文件
现在我们的应用程序已在模拟器和设备上进行了测试,是时候发布了。要将我们的应用程序发布到 Play 商店,我们需要创建一个 apk 文件。在 Eclipse 中,右键单击 HelloWorldApp 项目 –> Android Tools –> Export Signed Application Package,如图所示。
Export Android Application 对话框将打开,如图所示。验证是否选中了 “HelloWorldApp” 并单击 next。
KeyStore Selection 对话框出现。由于我们没有现有的密钥,请选择 “Create new Keystore” 选项。提供密钥库的位置并提供密码。如果您想使用此密钥为其他应用程序签名,则需要记住此密码。单击 Next
Key Creation Dialog 对话框打开。填写信息,如图所示,然后单击 Next。
然后您需要提供 apk 文件应保存的目标位置。完成后,单击 Finish,apk 文件将在您选择的路径中生成。
您可以将 apk 文件上传到设备,甚至上传到 Play 商店。要实际上传到 Play 商店,我们需要提供正确的包名和其他信息,但过程是相同的。
历史
2014年8月4日 - 本文使用了作者博客中的概念,http://www.codingparadox.com