一、Android工程视图下项目结构
- manfests:
- AndroidManifest.xml: APP的配置信息
- java:主要为源代码和测试代码
- res: 主要为资源目录,存储所有的项目资源
- drawable: 存储一些xml文件,-*dpi表示存储分辨率的图片,适用于不同的屏幕
- layout: 存储布局文件
- mipmap:存储原生图片资源
- values:存储app引用的一些值
- colors.xml:存储一些color的样式
- strings.xml:存储引用的string值
- style.xml: 存储app需要用到的一些样式
二、project工程视图下项目结构
- build:系统生成的文件目录,最后生成的apk文件就在这个目录
- app/libs:为项目需要添加的.jar包或.so包等外接库
- app/src: 项目的源代码,其中androidTest为测试包,main为主要的项目目录和代码,test为单元测试代码。
三、主要文件
(1)、AndroidManifest.xml
- xmlns:android= : 定义了android的命名空间。
- package : 制定本应用内Java主程序的包名。
- application: 声明了每一个应用程序的组件及其属性。
- android:allowBackup:将程序加入到系统的备份和恢复架构中。
- android:icon:显而易见表示APP的图标了。
- android:label:许可列表。
- android:supportsRtl:启用各种RTLAPI来用RTL布局显示应用。
- android:theme:android的主题。
- activity:android:name表示当前的activity的名字,因为工程为MainActivity,所以这个名字就为这个,之后有新的activity的话,也需要添加才可以使用。
- intent-filter:包含了action,data和category三种。
- action:只有android:name属性,常见的是android.intent.action.MAIN,表示此activity是作为应用程序的入口。
- data:指定了希望接受的intent请求的数据URI和数据类型。
- category:android:name属性,常见的是android.intent.category.LAUNCHER,决定应用程序是否显示在程序列表里。
(2)、build.gradle
Android Studio采用Gradle来构建项目。
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.example.a14784.myapplication"
minSdkVersion 24
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.2.0'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
}
- 第一行应用了一个插件,一般有两种值可以选择:com.android.application表示这是一个应用程序模块,com.android.library表示这是一个库模块。应用程序可以直接运行,代码库只能依附于别的应用模块来运行。
- compileSdkVersion指定项目的编译版本。
- buildToolsVersion指定项目构建工具的版本。
- defaultConfig闭包对项目的细节进行配置。
- buildTypes闭包用于指定生成安装文件的相关配置。
- dependencies闭包用于指定当前项目所有的依赖关系。
四、代码流程
(1)、注册代码
文件Android-Manifest.xml,部分代码:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这段代码是对MainActivity这个活动进行注册,表示.MainActivty是这个项目的主活动,在手机上点击应用图标时,首先启动的就是这个活动。
(2)、程序入口
上面我们队MainActivity活动进行了注册,这段代码在MainActity.java中。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
- MainActivity是继承了AppCompatActivity,这是一种向下兼容的Activity,可以将Activity各个版本的特性和功能兼容到Android 2.1中。
- onCreate()方法是一个活动被创建时必须执行的方法。
- setContentView()方法用来引入布局,这里引入的是activity_main。
(3)、布局
上面我们引入了activity_main布局,这个布局在文件app>src>main>res>layoutactivity_main.xml中。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="com.example.a14784.myapplication.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>