第一行代码 Android 第一章

本文围绕Android开发展开,介绍了Android系统框架、已发布版本及应用开发特色。详细说明了开发环境搭建,包括所需工具和android studio安装。还阐述了创建第一个Android项目的流程,分析项目目录结构、资源使用和build.gradle文件,最后介绍了日志工具的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 了解全貌——Android 王国简介

        1.1.1 Android 系统框架

            Android系统框架分为四层

            应用层:所有的应用都在这层,如地图,电话,以及我们自己开发的应用

            应用框架层:应用调用的api都在这层

            系统运行库层:这层比较负责,主要是c++所写的关于安卓特性的库,如webKit浏览器,SQLite数据库,OpenGL提供了3D绘图等,还有一个android运行时库,提供了一系列核心库,让java可以编写android应用,同时android运行时库还包含一个Dalvik虚拟机,可以让每一个应用都运行在独立的进程中,启动一个Dalvik虚拟机,在android5.0,Dalvik虚拟机被ART运行环境取代。

            Linux内核层:系统硬件驱动曾层

        1.1.2 Android已经发布的版本

            比较大的改变:

            Android5.0用ART运行环境取代了Dalvik虚拟机。ART是运行时环境,对代码在安装时进行预编译,启动很快,但是安装慢,占用内存大;而Dalvik虚拟机,是启动时候编译,比较慢。

           

        1.1.3 Android 应用开发特色

            四大组件

            丰富的系统控件

            SQLite数据库

            强大的多媒体

            地理位置定位

 

    1.2 手把手带你搭建开发环境

        1.2.1 准备所需的工具

            JDK:JAVA开发工具包

            SDK:Android开发工具包

 

        1.2.2 搭建开发环境

            android stuido的安装

 

    1.3 创建你的第一个Android项目

        1.3.1 创建HelloWorld项目

            创建一个新项目流程

 

        1.3.2 启动模拟器

            Android studio自带模拟器

 

        1.3.3 运行HelloWorld

            运行项目流程

 

       1.3.4 分析你的第一个Android项目

            project下目录结构

            

            .gradle 和 . idea是android studio自动生成的,不需要理会

            app:里面是主要代码,等会细说

            build:编译时自动生成的文件

            gradle:gradle wrapper配置文件

            .gitigonre:版本控制的时候,哪些不需要提交一类的

            build.gradle:全局的build构建脚本

            gradle.properties:全局的build配置文件

            gradlew和gradlew.bat:执行命令行的gradle命令,其中gradlew是window系统的,bat是mac或Linux系统的

            HellowWorld.iml:识别IntelliJ IDEA项目

            local.properties:是存放SDK位置的

            settings.gradle:识别项目引入模块的

 

            app下目录结构

            

            build:编译时自动生成的

            libs:第三方的jar包都放在里面

            src:代码,资源,测试文件

                androidTest:编写测试用例的

                man:资源文件和代码文件存放的地方,最重要的文件夹

                    java:java代码存放的地方

                    res:资源文件存放,入图片,文字等

                        AndroidManifest:配置文件,四大组件的注册,权限申请等

                test:自动化测试

            .gitigonre:版本控制时候,哪些不提交一类的控制

            app.iml:识别IntelliJ IDEA项目

            build.gradle:gradle构建脚本,有很多构建相关的

            proguard-rules.pro:混淆相关的

            androidTest和test文件夹区别, androidTest是整合测试。可以运行在设备或虚拟设备上.需要编译打包为APK在设备上运行,可以实时查看细节.test是单元测试类.运行在本地开发机上,可以脱离Android运行时环境,速度快。其实我现在也不懂

 

            AppCompatActivity是一种向下兼容的Activity

 

        1.3.5 详解项目中的资源

            res文件夹里面有drawable文件夹,以及多个mipmap文件夹,其中mipmap文件夹是放应用图标了,而drawable文件夹是用来放图片的,

            

 

            其中对应的密度大概是这个样子的

            

            一般来说,对应的图片应该放在对应的密度的文件夹里面,但是很多时候UI只给了一套图,我们建议放在xxhdpi文件夹里面,因为找图片的顺序是先在目标密度的文件夹里面寻找,然后往高层密度的文件夹里面寻找,找不到再往低层密度文件夹寻找。比如 我的手机屏幕密度是xxhdpi,那么drawable-xxhdpi文件夹下的图片就是最适合的图片。 如果drawable-xxhdpi文件夹下有这张图就会优先被使用,在这种情况下,图片是不会被缩放的。如果drawable-xxhdpi文件夹下没有这张图时, 系统就会自动去其它文件夹下找这张图了,优先会去更高密度的文件夹下找这张图片,我们当前的场景就是drawable-xxxhdpi文件夹,然后发现这里也没有android_logo这张图,接下来会尝试再找更高密度的文件夹,发现没有更高密度的了,这个时候会去drawable-nodpi文件夹找这张图,发现也没有,那么就会去更低密度的文件夹下面找,依次是drawable-xhdpi -> drawable-hdpi -> drawable-mdpi -> drawable-ldpi。这个 drawable-nodpi文件夹, 是一个密度无关的文件夹,放在这里的图片系统就不会对它进行自动缩放,原图片是多大就会实际展示多大,但是主意顺序

            所以在如果我手机的密度是mdpi,图片宽是像素320px,放到mdpi文件夹,图片大小保持不变,如果我的图片放在了xhdpi里面,会默认图片是一张高密度的图片,适合xhdpi使用,而现在我是mdpi,会对图片进行缩小,防止图片过大,160/240*320 就会变成213,约缩小成了0.6倍;如果我把图片放在了ldpi文件夹里面,如果我把图片放到ldpi里面,手机原本是mdpi,就是160/120*320大约等于427,约放大了1.3倍。(数据没有实践,因为没有找到合适的分辨率机器)

            在实际的过程中,如果我们放的文件夹密度过小,而手机密度过大,系统会自动帮我们放大图片,这样比较占用内存,所以我们尽量放在大密度的文件夹里面,我们选用xxhdpi文件夹,一是因为市面上这样的手机比较多,二是市面上高于xxhdpi密度手机很少了,所以大部分是正好密度的图片或者系统会帮我们缩小

 

            在应用资源文件的时候,可以通过R.string.app_name引用,或者@string/app_name

 

        1.3.6 详解build.gradle文件

            最外层的build.gradle文件 

buildscript {

    repositories {

        jcenter()

    }

    dependencies {

        classpath 'com.android.tools.build:gradle:2.3.3'

    }

}



allprojects {

    repositories {

        jcenter()

    }

}

        两处repositories的闭包中都声明了一个jcenter()代表的一个代码托管仓库,声明了这个可以很 容易的使用这仓库里面的代码

        dependencies的闭包里面的 classpath 'com.android.tools.build:gradle:2.3.3'是声明了一个gradle插件,因为gradle不仅仅是android,里面还有很多如c++等

 

        app里面的build.gradle文件

android {

    compileSdkVersion 24

    buildToolsVersion "25.0.2"

    defaultConfig {

        applicationId "com.example.pc.mymanifest"

        minSdkVersion 15

        targetSdkVersion 24

        versionCode 3

        versionName "火腿"

    }

    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:24.2.1'

    testCompile 'junit:junit:4.12'

}

        compileSdkVersion:编译的sdk版本,我们一般选用高版本,不是运行版本,不太理解这句话什么意思

        buildToolsVersion:项目构建工具的版本

        applicationId :项目的id,就是包名

        minSdkVersion:最低适配的版本

        targetSdkVersion:适配的目标版本

        versionCode:当前app版本

        versionName:当前app名称

 

        buildTypes安装文件的相关配置,通常有两个闭包,一个是debug,一个是release,其中debug是测试版本,可以不写,release里面分析如下

        minifyEnabled:是否混淆

        proguardFiles:混淆文件规则

 

        dependencies闭包里面都是放的相关的依赖关系,通常有三种依赖,本地依赖,库依赖,远程依赖,

        compile fileTree是本地依赖,是对本地的jar包或者目录添加依赖

        compile是远程依赖,com.android.support:appcompat-v7:24.2.1 表示com.android.support是域名, appcompat-v7是库名称, 24.2.1是版本

        compile project是库依赖的意思,这边没有用到

 

    1.4 前行必备——掌握日志工具的使用

        1.4.1 使用Android的日志工具Log

            Log.v()

            Log.d()

            Log.i()

            Log.w()

            Log.e()

 

        1.4.2 为什么使用Log而不使用System.out

            Log可以自动生成,打下logt,自动生成Log所需的TAG,是当前的Activity名称,打下logd,然后按Tab键,可以自动生成Log.d()打印

            Log可以添加过滤器

            

            show only selected application:只显示当前程序的Log

            Firebase:是谷歌的一个过滤器

            No Filters:相当于没有过滤器

            Edit Filter Configuration:自定义过滤器

            

            一般只需要写过滤器名称和LogTag就可以了,LogTag就是Log的参数tag。

 

    1.5 小结与点评

        一些基础知识需要记一下,Android的框架层以及对build文件的分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值