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


    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 25
        buildToolsVersion "25.0.2"
    
        defaultConfig {
            applicationId "com.example.zy.myapplication"
            minSdkVersion 15
            targetSdkVersion 25
            versionCode 1
            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" 项目的版本名


     

  • 相关阅读:
    5招教你实现多线程场景下的线程安全!
    跟我读论文丨ACL2021 NER BERT化隐马尔可夫模型用于多源弱监督命名实体识别
    大数据集群跨多版本升级、业务0中断,只因背后有TA
    云小课 | 到底什么是区块链?
    信创产业已成现象级新风口,快来加入争做“弄潮儿”
    教你如何使用FusionInsight SqoopShell
    【Kubernetes】镜像拉取策略-IfNotPresent
    【Kubernetes】镜像拉取策略-Always
    【Kubernetes】env 注入资源
    【Kubernetes】env 注入字段值
  • 原文地址:https://www.cnblogs.com/MrSaver/p/6545573.html
Copyright © 2020-2023  润新知