Android:日常学习笔记(2)——分析第一个Android应用程序

Android项目结构

整体目录结构分析

  

说明
  除了APP目录外,其他目录都是自动生成的。APP目录的下的内容才是我们的工作重点。

APP目录结构分析

  

项目如何运行

程序默认运行效果

  

说明:

  程序的默认运行效果就是不写一行代码,直接部署到模拟器上的运行效果。

定义主活动

打开AndroidManifest.XML中,我们可以找到下面这段代码:

        <activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
//这两句代码表示MainActivity是主活动,点击图标后首先运行此活动
</intent-filter>
</activity>

说明:
  这段代码表示对MainActivity活动进行注册,没有在AndroidManifest.XML中注册的活动是不能使用的。

什么是活动

  Android系统四大组件分别是
  ☐ 活动:Activity:其中活动时所有Android应用程序的门面,凡是在应用程序中看到的东西,都是放在活动中的。
  ☐ 服务:Service:你无法看到他,但是他一直在后台默默运行,即使用户退出,仍是可以运行的。
  ☐ 广播接收器:Broadcast Receiver:允许你的应用接受来自各处的广播消息,比如电话,短信。
  ☐ 内容提供器:Content Provider:为应用程序间共享数据踢欧冠呢了可能。

主活动分析

package com.example.zy.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle; public class MainActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) {
//活动被创建必须要调用下述的方法
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

说明:

  1.我们之前说了应用程序中所有的可以看到的东西都是放到活动中的,所以首先必须要继承自活动。

  2.主活动的继承关系:

  

  3.super.onCreate(savedInstanceState)就是调用父类的onCreate构造函数,时用来创建活动的,savedInstanceState是保存当前Activity的状态信息。

HelloWorld来自哪里

  我们可以看到MainActivity中只有两行代码,那么HelloWorld这行字来自哪里呢?
  其实在Android程序的设计讲究逻辑和视图分类,因此是不推荐在活动中直接编写界面的,更加通用的方法是在布局文件中编写界面,然后在活动中引入进来
  我们在第二行代码:setContentView(R.layout.activity_main);引入了布局文件,内容如下:

<?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.example.zy.myapplication.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>

说明:

  我们看到其中有一个TextView,这是Android的一个控件,用于在布局中显示文字的。

详解res目录

  

说明:

之所以有这么多的mipmap开头的文件夹,其实主要是为了让程序能够更好地兼容各种设备。
打开values目录下的strings.xml文件:

<resources>
<string name="app_name">My Application</string>
</resources>

这里定义了一个应用程序名的字符串,我们可以使用以下两种方式引用它:

• 在代码中通过: ◇ R.string.app_name

• 在XML文件通过: ◇ @string/app_name

详解build.gradle

  在AS中,我们是通过Gradle来构建项目的。Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置,摒弃了传统基于 XML的繁琐配置。

最外端的build.gradle

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
}
} allprojects {
repositories {
jcenter()
}
}

说明:

  两处repositories中都使用了jcenter(),jcenter是一个代码托管仓库,很多Android开源项目都会选择将代码托管到jcenter上,声明了这些配置,我们就可以在项目中轻松引用任何jcenter上的开源项目了
  dependencies 使用了classpath 声明了一个Cradle插件。

APP目录下的build.gradle

apply plugin: 'com.android.application'

android {
compileSdkVersion
buildToolsVersion "25.0.2" defaultConfig {
applicationId "com.example.zy.myapplication"
minSdkVersion
targetSdkVersion
versionCode
versionName "1.0"
}
buildTypes { //用于指定生成安装文件的相关配置,一般有release和deubug两项。
release {
minifyEnabled false //是否对代码进行混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //代码的混淆规则
}
}
} dependencies { //用于指定当前项目的所有依赖关系
compile fileTree(dir: 'libs', include: ['*.jar'])
//上着为本地依赖关系,将libs目录下*jar包添加到构建路径当中
testCompile 'junit:junit:4.12'
//声明测试用例库的
compile 'com.android.support:appcompat-v7:25.2.0'
//这是一个标准的远程依赖库格式,Gradle在构建项目时会检查是否有此库的缓存,如果没有则联网下载.添加依赖库声明:compile project(':helper'),将helper依赖关系加入.
}

说明:

  第一行引用了一个插件,com.android.application'是一个应用程序模块,可以直接运行,com.android.library是一种库模块,只能作为代码库依附于别的应用程序模块来运行。

   接下来是一个大的Android闭包,这个闭包可以配合项目构建的各种属性。

    compileSdkVersion 25 :指定使用Android6.0系统的SDK编译。

    buildToolsVersion :指定项目构建工具的版本。

   接下来是一个defaultConfig闭包,可以对项目的更多细节进行配置。

     applicationId :执行项目的包名

     minSdkVersion 15 项目最低兼容的Android系统版本

     targetSdkVersion 25 你在该秒版本上做过了充分的测试,系统会为你的应用程序启动一些最新的功能和特性。

     versionCode 1 项目版本号

     versionName "1.0" 项目的版本名

Android:日常学习笔记(2)——分析第一个Android应用程序的更多相关文章

  1. Android:日常学习笔记(5)——探究活动(2)

    Android:日常学习笔记(5)——探究活动(2) 使用Intent在活动之间穿梭 什么是Intent Intent时Android程序中各组件之间进行交互的一种重要方式,他不仅可以指明当前组件想要 ...

  2. Android:日常学习笔记(9)———探究持久化技术

    Android:日常学习笔记(9)———探究持久化技术 引入持久化技术 什么是持久化技术 持久化技术就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失 ...

  3. Android:日常学习笔记(9)———探究广播机制

    Android:日常学习笔记(9)———探究广播机制 引入广播机制 Andorid广播机制 广播是任何应用均可接收的消息.系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播.通过将 In ...

  4. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

  5. Android:日常学习笔记(7)———探究UI开发(4)

    Android:日常学习笔记(7)———探究UI开发(4) UI概述  View 和 ViewGrou Android 应用中的所有用户界面元素都是使用 View 和 ViewGroup 对象构建而成 ...

  6. Android:日常学习笔记(8)———探究UI开发(3)

    Android:日常学习笔记(8)———探究UI开发(3) 详解四种基本布局 前言 布局定义用户界面的视觉结构,如Activity或应用小部件的 UI.您可以通过两种方式声明布局: 在 XML 中声明 ...

  7. Android:日常学习笔记(7)———探究UI开发(1)

    Android:日常学习笔记(7)———探究UI开发(1) 常用控件的使用方法 TextView 说明:TextView是安卓中最为简单的一个控件,常用来在界面上显示一段文本信息. 代码: <T ...

  8. Android:日常学习笔记(6)——探究活动(4)

    Android:日常学习笔记(6)——探究活动(4) 活动的启动模式 standard模式 standard是活动默认的启动模式,在不进行显示定义的情况下,所有活动都会自动使用这种启动模式. stan ...

  9. Android:日常学习笔记(6)——探究活动(3)

    Android:日常学习笔记(6)——探究活动(3) 活动的生命周期 返回栈 Android中的活动是可以叠加的,我们每启动一个新活动,就会覆盖在原来的活动上,点击Back以后销毁最上面的活动,下面的 ...

随机推荐

  1. 203. Remove Linked List Elements【easy】

    203. Remove Linked List Elements[easy] Remove all elements from a linked list of integers that have ...

  2. stylelint — css书写规范

    sass lint guidance 一.安装:npm intsall -g stylelint 二.配置:http://stylelint.io/user-guide/rules/ (以下规则文件配 ...

  3. AV1视频编码标准资源汇总

    一直不看好HEVC,总觉得这东西绝对不可能再恢复像h264那么辉煌了,如此高昂的授权费,被淘汰估计也就这一两年了,有必要预研一下AV1,马上进去二进制码流冻结流程了,感觉aom越来越近了,毕竟goog ...

  4. TBSchedule源码阅读2-TBScheduleManagerFactory 定时任务ManagerFactoryTimerTask

    定时任务 : 主要功能:监听zookeeper状态,正常则this.factory.refresh(),异常则this.factory.reStart(); 1 正常情况this.factory.re ...

  5. oracle 启动模式

    转载自:http://blog.csdn.net/nsj820/article/details/6573525 <一>.ORACLE数据库启动模式 1.启动SQL*PLUS不与数据库连接 ...

  6. winform 的 checklistbox动态绑定并选中值

    绑定的代码:这里绑定的是一个泛型 BLL.PowerBLL powerbll = new BLL.PowerBLL(); checkpower.DataSource = powerbll.GetAll ...

  7. sql 注入安全过滤-安全模块

    <?php /** * 安全模块 * Email:zhangyuan@tieyou.com * 主要针对xss跨站攻击.sql注入等敏感字符串进行过滤 * @author hkshadow */ ...

  8. Android UI开发第二十八篇——Fragment中使用左右滑动菜单

    Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...

  9. python清除字符串中间空格的方法

    1.使用字符串函数replace >>> a = 'hello world' >>> a.replace(' ', '') 'helloworld' 看上这种方法真 ...

  10. 第六课作业——主从复制和sentinel高可用

    第六课时作业 静哥 by 2016.3.21~2016.4.3   [作业描述] 1.配置主从复制,截图看日志 2.配置一个哨兵,一主一从结构,并实现主宕机从接管的过程,截图显示 3.总结哨兵的原理 ...