zoukankan      html  css  js  c++  java
  • 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

    不要忘记努力,不要辜负自己 欢迎指正 QQ:1468580561
  • 相关阅读:
    驱动之类似内存接口的介绍与应用20170209
    驱动之LCD的介绍与应用20170209
    驱动之NandFlash的介绍与应用20170209
    Android广播机制的深入学习
    C++的隐式类型转换与转换操作符
    PackageManager使用
    在命令行中通过adb shell am broadcast发送广播通知
    Android无法收到指定广播的问题总结
    overload, override和overwrite之间的区别
    Longest Substring Without Repeating Characters -- LeetCode
  • 原文地址:https://www.cnblogs.com/smallocean/p/14448300.html
Copyright © 2011-2022 走看看