第一行代码学习总结(第一章)

编译工具:

使用的是

Android Studio 3.4.1
Build #AI-183.6156.11.34.5522156, built on May 2, 2019
JRE: 1.8.0_152-release-1343-b01 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0

分析第一个安卓程序:

​ 任何一个新建的项目都会默认使用Android模式的项目结构。

此项目结构适合快速开发。

新建项目:

第一行代码学习总结(第一章)_第1张图片

Android模式

第一行代码学习总结(第一章)_第2张图片

我们将项目结构变化为project,这就是真实的目录结构了。

project模式

第一行代码学习总结(第一章)_第3张图片

.gradle与.idea

这两个项目放置的是Andriod studio自动生成的文件,我们不必在意,也不用去编辑。

app

项目中的代码,资源等内容几乎全部放在这个目录下。

gradle

这个目录是gradle wrapper的配置文件。

.gitignore

这个文件是用来将指定的目录或文件,排除在版本控制之外。

build.gradle

项目全局的gradle构建脚本。build.gradle这个文件一共有两个,此处先介绍的是最外层的。

一般这个文件是不用去更改的。除非是要去添加一些全局的项目构建配置。

源码分析:这些代码全都是自动生成的。
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        jcenter()//jcenter是一个代码托管仓库
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.1'
        //声明了一个Gradle插件
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()//jcenter是一个代码托管仓库
        
    }
}

在app的目录下还存在一个build.gradle文件。

第一行代码学习总结(第一章)_第4张图片

源码分析:
//应用了一个插件。  一共有两种值可选,应用程序模块'com.android.application'与库模块'com.android.library'
apply plugin: 'com.android.application'//应用程序模块

android {
    compileSdkVersion 29//项目的编译版本
    buildToolsVersion "29.0.0"//项目构建工具的版本
    defaultConfig {
        applicationId "com.example.first"//项目的包名
        minSdkVersion 15//最低兼容的安卓版本
        targetSdkVersion 29//在29版本的API已经测试。
        versionCode 1//项目版本号
        versionName "1.0"//项目版本名
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false//项目代码不混淆
            //项目代码混淆时使用的混淆规则文件,Andriod Studio直接运行项目生成的都是测试版安装文件    
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

//指定当前项目的所有依赖关系
//Andriod  Studio通常有三种依赖方式:本地依赖,库依赖,远程依赖。
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])//本地依赖生明
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'//声明测试用例库
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

gradle.properties

全局的gradle配置文件,在这里配置的属性将会影响到整个gradle编译脚本。

gradlew和gradlew.bat

用来在命令行界面中执行gradle命令的,其中gradlew是用于Mac系统与Linux系统

gradlew.bat用于Windows系统。

First.imi

imi文件是所有Intellij IDEA项目都会自动生成的一个文件。用于标识这是Intellij IDEA项目。我们不需要修改。

local.properties

用于指定Android SDK的位置,会自动生成,不需要更改,但是当SDK位置改变时就要更改这个文件。

settings.gradle

这个文件用于指定项目中所有引入的模块。自动完成。需要手动修改的机会较少。

到这里Android的外层结构目录树已经介绍完毕了。

此时你会发现,我们的工作重点不会是外层的文件。

没错,pp目录下的文件是之后我们工作的重点。

现在对app目录进行介绍:

第一行代码学习总结(第一章)_第5张图片

build

这个目录与外层的build相似,主要包括在编译时自动生成的文件,不需要我们过多关心。

libs

如果你的项目中使用到了第三方的jar包,就需要将这些jar包放到这个目录下,放在这个目录下的jar包将自动添加到构建路径里去。

andriodTest

此处是用来编写Andriod Test测试用例的,可以对项目进行一些自动化测试。

java

放置我们的所有java代码文件的。

res

放置所有的图片,布局,字符串的资源。

图片放置在drawable目录下,布局放置在layout目录下,字符串放置在values目录下。

AndroidMaifest.xml

整个项目的配置文件,你在程序中定义的所有四大组件(活动,服务,广播接收器,内容提供器)都必须在这个文件里进行注册,另外还可以在此给应用程序添加权限声明。

AndroidMaifest.xml源码分析:


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:dist="http://schemas.android.com/apk/distribution"
    package="com.example.first">

    <dist:module dist:instant="true" />

    

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            intent-filter>//intent-filter标签中内容表示这个活动是主活动,应用启动后的进行的就是这个活动
        activity>//activity标签中内容表示对MainActivity这个活动进行注册,没有在AndriodMaifest.xml中注册的活动是不能使用的
    application>

manifest>

MainActivity.java文件分析:

package com.example.first;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.TextView;

public class MainActivity extends AppCompatActivity {//MainActivity继承自AppCompatActivity,Activity是安卓系统提供的一个活动基类。(AppCompatActivity是Activity的子类)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);//onCreate()方法是活动被创建时必定要执行的方法。
        //Andriod程序讲究逻辑与视图分离,因此不推荐在活动中直接编写界面,更加通用的方法是在布局文件中编写界面,在活动文件中引入。
        
        setContentView(R.layout.activity_main);//setContentView()方法给当前活动引入(在代码中通过R.string.app_name在XML中通过@string/app_name引入字符串)一个布局
    }
}

activity_main.xml源码:


<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">

    

androidx.constraintlayout.widget.ConstraintLayout>

res/values/string.xml文件

<resources>
    <string name="app_name">firststring>//定义了应用程序名字的字符串,在代码中通过R.string.app_name
    //在XML中通过@string/app_name引入字符串
resources>

日志工具的使用:

Android中的日志工具类是通过Log(android.util.Log)

这个类中提供了五个方法来供我们打印日志。

这五个方法的等级是递增的;当使用Log.v()也就是verbse最低等级,那么我们选择使用debug级别,这时只有我们使用debug以上级别才会显示出来。

如图选框选中的是verbse级别。

[外链图片转存失败(img-FyzKKopI-1563517884451)(C:\Users\Admin\AppData\Roaming\Typora\typora-user-images\1561277875953.png)]

Log.v()

Log.d()

Log.i()

Log.w()

Log.e()

MainActivity.java文件:

package com.example.first;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       Log.d("MainActivity", "onCreate execute");//添加打印日志的语句。

    }
}

编程小技巧:

在Android中MainActivity.java的onCreate方法中输入logd,然后按下Tab键就会自动补全一条debug级别的日志。

在Android中MainActivity.java的onCreate方法外输入logt,然后按下Tab键就会创建一个以当前类名为值自动生成一个TAG静态常量。

MainActivity.java文件:

package com.example.first;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate execute");
    }

    private static final String TAG = "MainActivity";//自动生成一个TAG静态常量。 


}

End:

日志级别控制的好处是可以很快找到自己需要的日志。

你可能感兴趣的:(第一行代码学习总结(第一章))