使用的是
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模式的项目结构。
此项目结构适合快速开发。
我们将项目结构变化为project,这就是真实的目录结构了。
这两个项目放置的是Andriod studio自动生成的文件,我们不必在意,也不用去编辑。
项目中的代码,资源等内容几乎全部放在这个目录下。
这个目录是gradle wrapper的配置文件。
这个文件是用来将指定的目录或文件,排除在版本控制之外。
项目全局的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文件。
//应用了一个插件。 一共有两种值可选,应用程序模块'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配置文件,在这里配置的属性将会影响到整个gradle编译脚本。
用来在命令行界面中执行gradle命令的,其中gradlew是用于Mac系统与Linux系统
gradlew.bat用于Windows系统。
imi文件是所有Intellij IDEA项目都会自动生成的一个文件。用于标识这是Intellij IDEA项目。我们不需要修改。
用于指定Android SDK的位置,会自动生成,不需要更改,但是当SDK位置改变时就要更改这个文件。
这个文件用于指定项目中所有引入的模块。自动完成。需要手动修改的机会较少。
这个目录与外层的build相似,主要包括在编译时自动生成的文件,不需要我们过多关心。
如果你的项目中使用到了第三方的jar包,就需要将这些jar包放到这个目录下,放在这个目录下的jar包将自动添加到构建路径里去。
此处是用来编写Andriod Test测试用例的,可以对项目进行一些自动化测试。
放置我们的所有java代码文件的。
放置所有的图片,布局,字符串的资源。
图片放置在drawable目录下,布局放置在layout目录下,字符串放置在values目录下。
整个项目的配置文件,你在程序中定义的所有四大组件(活动,服务,广播接收器,内容提供器)都必须在这个文件里进行注册,另外还可以在此给应用程序添加权限声明。
<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>
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引入字符串)一个布局
}
}
<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>
<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()
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静态常量。
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静态常量。
}