创建一个新项目

设置 Android Studio

首先设置 Android Studio ,然后打开它。现在,你已准备好制作首个 Android 应用程序了!

注意: 本指南基于 Android Studio 2.2,但其他版本的过程主要是相同的。

配置你的项目

基本配置

你可以通过两种方式启动新项目:

  • 单击欢迎屏幕中的 Start a New Android Studio Project
  • 如果你已打开项目,请导航至 FileNew Project

接下来,你需要填写一些字段来描述你的应用程序:

  1. 应用程序名称 - 此名称将显示给用户。

    示例:Hello World。你可以随时在 AndroidManifest.xml 文件中进行更改。

  2. 公司域 - 这是项目包名称的限定符。

    示例:stackoverflow.com

  3. 包名称 (又名 applicationId) - 这是完全限定的项目包名称。

    它应该遵循反向域名表示法 (又名反向 DNS ): 顶级域名**。公司域名。** [ 公司细分**。** ] 申请名称

    示例:com.stackoverflow.android.helloworldcom.stackoverflow.helloworld。你始终可以通过在 gradle 文件中覆盖 applicationId 来更改它。

除非你不打算将你的应用程序提交到 Google Play 商店,否则请勿使用默认前缀“com.example”。包名称将是你在 Google Play 中的唯一 applicationId

  1. 项目位置 - 这是存储项目的目录。

StackOverflow 文档

选择 Form Factors 和 API Level

在下一个窗口中,你可以选择应用支持的外形规格,例如手机,平板电脑,电视,Wear 和 Google Glass。选定的形状因子成为项目中的 app 模块。对于每种外形规格,你还可以选择该应用的 API 级别。要获取更多信息,请单击“ 帮助我选择”

StackOverflow 文档 当前 Android 版本发行版的图表,当你单击帮助我选择时显示。

Android 平台分发窗口显示运行每个 Android 版本的移动设备的分布,如图 2 所示。单击 API 级别以查看相应 Android 版本中引入的功能列表。这有助于你选择具有应用所需的所有功能的最低 API 级别,以便你可以访问尽可能多的设备。然后单击确定

现在,选择应用程序将支持的 Android SDK 平台和版本

StackOverflow 文档

目前,仅选择手机和平板电脑

最低 SDK 是你的应用程序的下限。这是 Google Play Store 用来确定应用程序可以安装在哪些设备上的信号之一。例如, Stack Exchange 的应用程序支持 Android 4.1+。

StackOverflow 文档
Android Studio 会告诉你(大约)在指定的最小 SDK 的情况下支持的设备百分比。

较低的 API 级别针对更多设备,但可用的功能较少。

在决定使用 Minimum SDK 时,你应该考虑 Dashboards 统计信息 ,它会为你提供有关上周访问 Google Play 商店的设备的版本信息。

StackOverflow 文档

来自: Android 开发者网站上的 Dashboards

添加活动

现在我们将为我们的应用程序选择一个默认活动。在 Android 中, Activity 是一个将呈现给用户的单个屏幕。应用程序可以容纳多个活动并在它们之间导航。在本例中,选择 Empty Activity 并单击下一步

在这里,如果你愿意,可以更改活动和布局的名称。一个好的做法是将 Activity 作为活动名称的后缀,并将 activity_ 作为布局名称的前缀。如果我们将这些保留为默认值,Android Studio 将为我们生成一个名为 MainActivity 的活动,以及一个名为 activity_main 的布局文件。现在点击 Finish

Android Studio 将创建和配置我们的项目,这可能需要一些时间,具体取决于系统。

检查项目

要了解 Android 的工作原理,让我们来看看为我们创建的一些文件。

在 Android Studio 的左侧窗格中,我们可以看到 Android 应用程序结构

StackOverflow 文档

首先,让我们通过双击打开 AndroidManifest.xml。Android 清单文件描述了有关 Android 应用程序的一些基本信息。它包含我们活动的声明,以及一些更高级的组件。

如果应用程序需要访问受权限保护的功能,则必须声明它需要具有清单中的 <uses-permission> 元素的权限。然后,当应用程序安装在设备上时,安装程​​序通过检查签署应用程序证书的权限并在某些情况下询问用户来确定是否授予所请求的权限。应用程序还可以使用权限保护自己的组件(活动,服务,广播接收器和内容提供商)。它可以使用 Android 定义的任何权限(在 android.Manifest.permission 中列出)或由其他应用程序声明。或者它可以定义自己的。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.stackoverflow.helloworld">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

接下来,让我们打开 activity_main.xml,它位于 app/src/main/res/layout/。此文件包含 MainActivity 的可视组件的声明。你会看到视觉设计师。这允许你将元素拖放到选定的布局上。

你还可以通过单击 Android Studio 底部的文本切换到 xml 布局设计器,如下所示:

StackOverflow 文档

<?xml version="1.0" encoding="utf-8"?>
<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="com.stackexchange.docs.helloworld.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>

你将在此布局中看到一个名为 TextView 的小部件,其中 android:text 属性设置为 Hello World!。这是一个文本块,将在用户运行应用程序时显示。

你可以阅读有关布局和属性的更多信息。

接下来,我们来看看 MainActivity。这是为 MainActivity 生成的 Java 代码。

public class MainActivity extends AppCompatActivity {

    // The onCreate method is called when an Activity starts
    // This is where we will set up our layout
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // setContentView sets the Activity's layout to a specified XML layout
        // In our case we are using the activity_main layout
        setContentView(R.layout.activity_main);
    }
}

根据我们的 Android 清单中的定义,MainActivity 将在用户启动 HelloWorld 应用程序时默认启动。

最后,打开位于 app/的名为 build.gradle 的文件。
Android Studio 使用构建系统 Gradle 来编译和构建 Android 应用程序和库。

apply plugin: 'com.android.application'

android {
signingConfigs {
         applicationName {
             keyAlias 'applicationName'
             keyPassword 'password'
             storeFile file('../key/applicationName.jks')
             storePassword 'anotherPassword'
         }
     }
    compileSdkVersion 26
    buildToolsVersion "26.0.0"

    defaultConfig {
        applicationId "com.stackexchange.docs.helloworld"
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        signingConfig signingConfigs.applicationName
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:26.0.0'
}

此文件包含有关构建和应用程序版本的信息,你还可以使用它来向外部库添加依赖项。现在,我们不做任何改变。

建议始终选择可用于依赖项的最新版本:

compileSdkVersion

compileSdkVersion 是告诉 Gradle 用于编译应用程序的 Android SDK 版本的方法。使用新的 Android SDK 是使用该级别中添加的任何新 API 的要求。

应该强调的是,更改 compileSdkVersion 不会改变运行时行为。虽然更改 compileSdkVersion 时可能会出现新的编译器警告/错误,但你的 compileSdkVersion 不包含在你的 APK 中:它纯粹是在编译时使用的。

因此,强烈建议你始终使用最新的 SDK 进行编译。你将获得对现有代码进行新编译检查的所有好处,避免新弃用的 API,并准备好使用新 API。

minSdkVersion

如果 compileSdkVersion 设置了最新的 API,则 minSdkVersion 是你应用的下限minSdkVersion 是 Google Play 商店用于确定应用程序可以安装在哪个用户设备上的信号之一。

它在开发过程中也扮演着重要角色:默认情况下,lint 针对你的项目运行,当你使用 minSdkVersion 上方的任何 API 时会发出警告,帮助你避免尝试调用不存在的 API 的运行时问题。在仅在较新的平台版本上使用 API​​时,在运行时检查系统版本是一种常见技术。

targetSdkVersion

targetSdkVersion 是 Android 提供前向兼容性的主要方式,除非更新 targetSdkVersion,否则不应用行为更改。这允许你在完成行为更改之前使用新的 API。更新以定位最新的 SDK 应该是每个应用程序的高优先级。这并不意味着你必须使用所引入的每个新功能,也不应该盲目更新你的 targetSdkVersion 而不进行测试。

targetSDKVersion 是 Android 的版本,它是可用工具的上限。如果 targetSDKVersion 小于 23,则即使应用程序在 API 23+上运行,应用程序也不需要在运行时为实例请求权限。TargetSDKVersion 并没有阻止 Android 的版本采摘 Android 版本上面运行的应用程序。

你可以找到有关 Gradle 插件的更多信息:

运行应用程序

现在,让我们运行我们的 HelloWorld 应用程序。你可以运行 Android 虚拟设备(可以使用 Android Studio 中的 AVD Manager 进行设置,如下例所示),也可以通过 USB 线连接自己的 Android 设备。

设置 Android 设备

要在 Android 设备上从 Android Studio 运行应用程序,你必须在设备的设置中启用 Developer Options 中的 USB Debugging

Settings > Developer options > USB debugging

如果在设置中看不到 Developer Options,请导航至 About Phone 并点击 Build Number 七次。这将使 Developer Options 能够显示在你的设置中。

Settings > About phone > Build number

你还可能需要更改 build.gradle 配置以构建你的设备所具有的版本。

从 Android Studio 运行

单击 Android Studio 顶部工具栏中的绿色 Run 按钮。在显示的窗口中,选择要在其上运行应用程序的设备(如有必要,请启动 Android 虚拟设备,或者如果需要设置 ,请参阅设置 AVD(Android 虚拟设备) )并单击 OK

StackOverflow 文档

在运行 Android 4.4(KitKat) 且可能更高的设备上,将显示一个弹出窗口以授权 USB 调试。点击 OK 接受。

该应用程序现在将在你的 Android 设备或模拟器上安装并运行。

APK 文件位置

准备发布应用程序时,可以配置,构建和测试应用程序的发行版。配置任务很简单,涉及基本代码清理和代码修改任务,有助于优化你的应用程序。构建过程类似于调试构建过程,可以使用 JDK 和 Android SDK 工具完成。测试任务可作为最终检查,确保你的应用程序在实际条件下按预期执行。准备好发布应用程序后,你将拥有一个已签名的 APK 文件,你可以将其直接分发给用户或通过 Google Play 等应用程序市场进行分发。

Android Studio

由于在上面的示例中使用了 Gradle,因此生成的 APK 文件的位置为:<Your Project Location>/app/build/outputs/apk/app-debug.apk

IntelliJ

如果你在切换到 Studio 之前是 IntelliJ 的用户,并且直接导入 IntelliJ 项目,则没有任何更改。输出的位置将在下面相同:

out/production/...

注意:这有时会在 1.0 左右被弃用

日食

如果你直接导入 Android Eclipse 项目,请不要这样做! 只要你的项目(罐子或库项目)中有依赖项,这将无效,你的项目将无法正确设置。如果你没有依赖关系,那么 apk 将与你在 Eclipse 中找到它的位置相同:

bin/...