搭建安卓开发环境(Android Studio)

Posted on 2016-02-11 in Android by yucongchen

最近想用业余时间学习一下android,教程,书本上以eclipse+adt居多,实际搜索一下,现在android studio好评还是比较多的,而且是google官方出的。于是还是折腾一下。

使用android studio搭建安卓开发环境十分简单,当然jdk是必备的,然后去http://developer.android.com下载android studio安装。
上面的地址需要翻墙,国内可以去http://www.androiddevtools.cn下载,版本更新比较慢,不过日常完全够用了,而且还有很多工具,建议收藏。

安装SDK

第一次启动android studio的时候会有一个引导,主要是要安装Android SDK,建议可以现选一个,其它等进入之后再点击android sdk manager的图标进行修改,建议把4.0以上的sdk全都装上。

搭建安卓开发环境

Hello World

创建一个HelloWorld项目,这里跟着向导就好了,选Blank Activity,其中有几个地方需要注意:

  • Application Name 代表应用名称,也就是安装之后在桌面现实的名字。这里是Hello World
  • Project Name 代表项目名称,这里就是HelloWorld。
  • 最后一步会给Activity起个名字,默认的是MainActivity,这里我们改成HelloWorldActivity

建好之后我们现别急着运行,先看看目录结构。

主要需要关注的是app目录下面的src目录中的main目录:

java
这个目录下就是我们的java源代码了。

res
这个目录下内容比较多,包括项目中用到的图片,布局,字符串,颜色等,其中图片放在drawable目录下,布局文件放在layout下,字符串都放在values目录下,values目录下有strings.xml,colors.xml等文件,分别放不同的字符串。

AndroidManifest.xml
这个文件就是整个项目的配置文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="demo.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=".HelloWorldActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- ATTENTION: This was auto-generated to add Google Play services to your project for
             App Indexing.  See https://g.co/AppIndexing/AndroidStudio for more information. -->
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
    </application>
</manifest>

其中有个节点叫<intent-filter>,表示对HelloWorldActivity是这个项目的主activity,程序启动的时候,首先就是启动这个activity。

OK,现在已经迫不及待想把程序跑起来了,但是这里我们还要先装一个模拟器。

安装AVD

启动之前还要配置一个安卓模拟器,简称AVD(android virtual device),单击刚才SDK manager旁边的那个图标,那个就是AVD Manager。

这里继续创建的时候需要下载system image,建议下载有x86什么的,据说提供更好的模拟器性能,之后又是漫长的等待。

经过漫长的等待,终于看到我们的程序跑起来了。

有没有注意到一点,程序中间有个Hello world的字符串,明明我们并没有做什么事情,为什么这里就有字符串显示了呢?

了解安卓程序

还记得之前我们在AndroidManifest.xml中注册的主Activity吗?
安卓的系统四大组件分别是 Activity(活动,是程序的门面),Service(服务,在后台默默运行的),Broadcast Receiver(广播接收器,接收来自各处的广播消息,包括别的应用程序),Content Provider(内容提供器,应用程序之间共享数据用的,比如读取联系人之类的)。

现在就来看看我们的主Activity,HelloWorldActivity。

public class HelloWorldActivity extends AppCompatActivity {
    private GoogleApiClient client;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hello_world);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
    }
}

内容比较多,这里只是节选了一部分,可以看到HelloWorldActivity继承自AppCompatActivity,这里的AppCompatActivity又继承了FragmentActivity类,但是最终是继承了Activity类。Activity类是Android提供的一个基类,提供了Activity作为『Activity』的能力。

其中我们关注onCreate方法,这个方法是当这个Activity被创建时执行的。其中调用了setContentView(R.layout.activity_hello_world);方法,这个就是给当前活动设置布局。
这里设置的布局就是activity_hello_world,之前说过布局在res/layout目录下,打开res/layout/activity_hello_world.xml文件,其中有一句<include layout="@layout/content_hello_world" />这里引用了另一个文件。打开同目录下的这个文件。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    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"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="demo.helloworld.HelloWorldActivity"
    tools:showIn="@layout/activity_hello_world">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
</RelativeLayout>

其中有个TextView,属性里面有一个android:text="@string/hello_world",其实这里的@string/hello_world是一个变量,引用的是res/values/strings.xml里面的东西,打开来看看:

<resources>
    <string name="app_name">Hello World</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world! 123</string>
</resources>

<string name="hello_world">Hello world! 123</string>就是最后显示的字符串。同样可以看到上面还有个app_name的字符串,我们的程序在手机里现实的名称就是在这里定义的啦。

至此,我们已经搭建完安卓的开发环境,并且基本了解了一个安卓程序的结构。

重要的东西:Log

Log,Log,Log重要的东西说三遍,现在来看看如何在安卓程序中添加Log。

还是刚才的onCreate方法,里面添加一句Log.d("HelloWorldActivity", "onCreate");

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_hello_world);

    Log.d("HelloWorldActivity", "onCreate");
}

这里的Log对象是引用自android.util.Log,在android studio中输入这个后,点着Log然后alt+enter就可以自动引入了,手动引入也可以import android.util.Log;

这里Log.d表示打印的log是debug级别的,两个参数,第一个表示tag,主要用于定位打印信息,另一个就是具体的打印内容。log级别共有5级:

  • verbose 级别最低,对应Log.v()
  • debug 比verbose高,主要用于输出调试信息
  • info 比debug高,主要用于输出一些常用信息,对应Log.i()
  • warn 又高一级,用于输出一些警告信息,对应Log.w()
  • error 最高级的log,表示错误信息,对应Log.e()

之后运行程序,可以看到android studio中下面有个窗口叫logcat,里面飞速的打印了一大堆信息,等程序启动完,我们的主Activity已经创建完毕了,信息停了,但是我们找不到我们想看的那句。细心的童鞋可能已经看到了,这个窗口上有几个按钮:

搭建安卓开发环境

可以试着切换一下log level,或者查找一下我们刚才打的log。
常用的还可以创建一个filter,就在上图的最右边那个框,选择"Edit Filter Configuration",创建一个filter,如下图:

搭建安卓开发环境

这里的Log Tag就是我们之前打log时的第一个参数,创建完之后选择filter,是不是很方便就看到我们刚才打的log咧。

总结

  1. Android程序不推荐在程序中对字符串进行硬编码,而是把字符串定义在一个XML文件中。
  2. 在XML中可以通过@string/hello_world获得这个字符串的引用。
  3. 在代码中可以通过R.string.hello_world获得这个字符串的应用。
  4. 了解了Android中打log的方式