Android 基础(一)HELLO WORLD

Android 基础(一)HELLO WORLD

第一行代码(第二版)的学习笔记

一、系统架构

Android可以分为四层架构:

1、Linux内核层

Android系统基于Linux内核,为设备的各种硬件提供底层驱动。

显示驱动,音频驱动,照相机驱动,蓝牙驱动,Wi-Fi驱动,电源管理等。

2、系统运行库层

A.系统库

通过C/C++库为Android系统提供了主要的特性支持。

  1. Surface Manager:执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责 2D 绘图与 3D 绘图进行显示合成。
  2. Media Framework:多媒体库,基于 PacketVideo OpenCore;支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H.264、AAC、ARM。
  3. SQLite : 小型的关系型数据库引擎。
  4. OpenGL|ES:根据 OpenGL ES 1.0API 标准实现的 3D 绘图函数库。
  5. FreeType:提供点阵字与向量字的描绘与显示。
  6. WebKit:一套网页浏览器的软件引擎。
  7. SGL:底层的 2D 图形渲染引擎。
  8. SSL:在 Android 上通信过程中实现握手。
  9. Libc:从 BSD 继承来的标准 C系统函数库,专门为基于 embedded linux 的设备定制。

B.运行时库

为了能够运行java,需要java的核心包的支持,然后通过JVM虚拟机来运行

  1. Core Libraries:相当于java的JDK,是运行android应用程序所需要的核心库
  2. Dalvik Virtual Machine:相当于JVM,这是Google专为Android开发的运行android应用程序所需的虚拟机

3、应用框架层

应用程序的框架,提供构建应用程序时可能用到的各种API。

4、应用层

所有安装在手机上 的应用程序都属于这一层

二、安卓四大组件

Android一共有四种常用的组件:

Activity、Service、ContentProvider、BroadcastReceiver

Activity

Activity就是我们应用程序的界面,主要用来跟我们的用户进行交互的,比如一个文本框,按钮这些就是显示在Activity上的,并且可以接收数据,传递数据到后台,然后再显示出来。

Service

Service我们是看不见的,对于绝大部分的数据的处理,业务的处理都是通过Service来完成的。

ContentProvider

为应用程序之间共享数据提供了可能,比如读取系统电话簿中的联系人。

BroadcastReceiver

广播接收器:允许应用接收来自各处的广播消息

三、项目文件分析

project

app

res

  • 所有以drawable开头的都是用来放置图片
  • 所有以mipmap开头的都是用来放置图标的->为什么会有这么多:为了使程序可以兼容不同的设备。其实最好也设定drawable多个不同文件夹,来放置多个不同分辨率的图片。运行时根据当前设备分辨率的高低选择加载哪个文件夹下的图片。

如何使用res下的资源:

如values中strings.xml

<resources>
    <string name="app_name">DemoApplication</string>
</resources>
  • 代码中通过R.string.app_name可以引用该字符串
  • XML中可以通过@string/app_name引用该字符串

上面是基本的语法,string可以换成drawable,或者mipmap,布局文件则是layout

四、项目构建gradle基础

gradle是一种项目构建工具,摒弃了传统基于XML(如Ant和Maven)的各种烦琐配置

最外层build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.1.0"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

buildscript是用来创建gradle插件的 表示用的插件版本是4.1.0

jcenter是开源库


app下的build.gradle

plugins {
    id 'com.android.application'
}

android {
    compileSdkVersion 30 // 项目的编译版本
    buildToolsVersion "30.0.2" // 项目构建工具的版本

    defaultConfig {
        applicationId "com.example.demoapplication" // 指定项目的包名
        minSdkVersion 16 // 安卓最低兼容版本
        targetSdkVersion 30 // 表示在安卓目标版本上已经做了足够的test,系统会引入相应功能
        versionCode 1 // 项目的版本号
        versionName "1.0" // 版本号

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release { // 生成正式版安装文件的配置
            minifyEnabled false // 是否对项目代码进行混淆
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 混淆规则文件
        }
        // debug配置可以不写
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8 // java版本
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies { // 指定当前项目所有的依赖关系

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

com.android.application代表是应用程序模块,com.android.library代表是一个库模块

android闭包里可以配置项目构建的各种属性。

五、helloworld

活动

表示MainActivity是主活动

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

继承自AppCompatActivity的一种向下兼容的Activity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

Activity是Android系统提供的一个活动基类,项目中所有的活动都必须继承它或者它的子类才拥有活动的特性,AppCompatActivity是Activity的子类。

onCreate方法是活动被创建时必定执行的方法。

布局

安卓程序设计讲究逻辑和视图分离->在布局文件中写界面,然后在活动中引入

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<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">

    <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" />

</androidx.constraintlayout.widget.ConstraintLayout>

六、日志

使用Android的日志工具Log

posted @ 2021-02-25 17:42  house_cat  阅读(352)  评论(0编辑  收藏  举报