zoukankan      html  css  js  c++  java
  • Android 01

    Android系统架构

    linux内核层

    系统运行库层

    应用框架层

    应用层

    名词解释

    HAXM

    HAXM(Hardware Accelerated Execution Manager)

    intel的硬件辅助虚拟化引擎。

    Google APIs Intel x86 Atom_64_System Image

    use google api or youtube api.

    AVDs(Android Virtual Devices )

    • 谷歌Pixel 2是谷歌pixel第二代智能手机,于2017年发布。

    • Pixel XL 下载他的AVD

    res/mipmap(贴图)

    为什么我们应该使用mipmap来启动应用程序启动器图标?设备具有不同的分辨率,所以启动器应用程序显示不同分辨率的图标。资源优化技术有时会为未使用的屏幕密度移除资源,并且当启动器应用程序必须升级显示器的较低分辨率图标时,它可能看起来模糊不清。为了避免这个问题,应用程序应该为应用程序启动器图标使用mipmap可绘制文件夹。

    密度类型 代表的分辨率(px) 屏幕密度(dpi) 换算(dp/px) 比例
    低密度(ldpi) 240x320 120 1dp=0.75px 3
    中密度(mdpi) 320x480 160 1dp=1px 4
    高密度(hdpi) 480x800 240 1dp=1.5px 6
    超高密度(xhdpi) 720x1280 320 1dp=2px 8
    超超高密度(xxhdpi) 1080x1920 480 1dp=3px 12

    推荐:https://www.jianshu.com/p/7fa3417d2ca4

    AndroidManifests

    AndroidManifest.xml是Android应用程序中最重要的文件之一。它是Android程序的全局配置文件,是每个 android程序中必须的文件。

    Gradle

    若你想创建一个Android Studio基于gradle,必须写一个构建脚本,该文件即build.gradle,gradle已经为我们提供了默认的配置以及通常的默认值。若你需要使用自己的配置,可以简单的重写它们即可。Gradle是一种基于Groovy的动态DSL,而Groovy语言是一种基于jvm的动态语言。

    https://blog.csdn.net/sinat_33943657/article/details/84674177

    Logcat

    logcat是Android中一个命令行工具,可以用于得到程序的log信息。

    https://www.cnblogs.com/JianXu/p/5468839.html

    File -> Invalidate Caches/Restart

    View -> Tool Windows -> Android Profiler

    jcenter

    JCenter是Goovy Grape内的默认仓库,Gradle内建支持jcenter()仓库,项目库打包成aar文件类似jar,只是多了res,lib文件的包,上传到jcenter后,可以很方面的在本地调用库文件

    Android studio环境配置

    1. 配置SDK
    2. 配置AVD

    Create Your First Application

    Design Build可以放一些 invisible的组件。

    首先切入Design build模式。然后放入组件:

    其中最左边的:

    id 是unique。

    下面是Attribute,然后是LayOut

    如果想看详细的代码,可以点击右上角的Code 查看详细代码, 我们目前是design模式。【视频中是左下角】

    然后视频中介绍了 xml是一种mark of language。

    Android文件夹简介

    • .gradle和.idea:放的是Android studio 自动生成的文件
    • app:项目中的代码、资源等内容几乎全部都在里面
    • build:编译时自动生成的文件
    • gradle:这个目录下包含了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地缓存的情况决定是否需要联网下载gradle。Android studio默认没有启动gradle wrapper的方式,可以在deployment进行配置修改。
    • .gitgnore:排除在版本控制之外的
    • build.gradle:项目的全局gradle构建脚本。这个文件一般不需要修改
    • gradle properties:全局的gradle配置文件,这个地方的配置属性会影响项目中的所有gradle编译脚本。
    • gradlew和gradlew.bat:是用来在命令行界面执行gradle命令的,其中gradlew是在Mac和linux下使用,.bat在window
    • local.properties:这个文件用于指定本机中的Android SDK路径,通常内容都是自动生成的,并不需要我们去修改。除非你本机的Android SDK位置发生了变化。
    • settings.gradle:用于指定项目中所有引入模块。比如helloworld只有一个app,也就只引入了这一个。

    app文件夹

    • build:编译时自动生成文件
    • libs:你项目中使用的第三方jar包
    • androidTest:编写Android 测试用例的
    • java:java代码所在地
    • res:图片、布局、字符串等资源所在目录。
      • layout放在drawanle
      • 字符串放在values
    • AndroidManifest.xml:整个Android的配置文件,你在程序中定义的四大组件都需要在这个文件里注册,另外还可以在这个文件中给应用程序添加权限声明。
    • test :单元测试
    • .gitignore
    • build.gradle:这是app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置,我们稍后将会详细分析gradle构建脚本中的具体内容。
    • proguard-rules.pro:这个文件是用于指定代码的混淆规则,防止逆向。

    build.gradle

    Android studio是通过gradle来构建项目的:

    plugins {
        id 'com.android.application'
    }
    
    android {
        compileSdkVersion 30
        buildToolsVersion "30.0.2"
    
        defaultConfig {
            applicationId "com.ssozh.helloworld"
            minSdkVersion 19
            targetSdkVersion 30
            versionCode 1
            versionName "1.0"
    
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            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'
    }
    

    上面是app中build.gradle。

    • plugins闭包:是使用的插件,一般可选值为com.android.application表示, 这是一个应用程序模块,而com.android.library表示是一个库模块。

    • android闭包:这个闭包可以配置我们构建项目的各种属性,编译版本、构建工具版本和三个嵌套的闭包。

      • defaultConfig闭包:最低兼容版本等等。versionCode版本号,versionName版本名。
      • buildTypes闭包:用于指定生成安装文件的相关配置,通过两个子包,一个是debug(可以忽略不写)一个是release。minifyEnabled表示混淆属性。
      • compileOptions闭包:编译版本,是不是使用的java8
    • dependencies闭包:指定当前项目所有的依赖关系。

      • 本地依赖
      • 库依赖
      • 远程依赖:对jcenter库上的开源项目添加依赖关系。

    四大组件

    activity 、 service、 broadcast receiver、 content provider

    • 活动:Android程序的门面, 凡是你看得到的东西都是放在活动中。
    • 服务
    • 广播接收器
    • 内容提供器

    其中活动注册就是在AndroidManifest.xml中。其中<intent-filter>中的代码表示这个是这个项目的主活动,在手机上点击应用图标,首先启动的就是这个活动。

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

    通过<ctrl+H>查看继承关系:

    其中activity是Android系统提供的一个活动基类,我们项目的所有活动都必须继承他或者他的子类才能有用活动的特性。而MainActivity中的onCreate()个活动被创建出来时必须要执行的方法。Android程序设计讲究视图和逻辑分离,其中在布局文件中编写视图,而onCreate()方法中的setVContentView方法是用来给当activity引入一个activity_main的布局。

    布局文件都定义在res/layout目录下的,这个布局的xml中有一个TextView标签,就是一个textView布局,而helloworld就是写在这里。

    而另外,在res/values/strings.xml也存在helloworld:

    <resources>
        <string name="app_name">Hello World</string>
    </resources>
    

    我们可以有两种方式来引用他:

    • 在代码中通过R.string.app_name来引用他。
    • 在xml中通过@string/app_name可以获得该字符串的引用。

    Layout

    如果修改了button的 id,则会产生warning,产生的原因是因为:最下面一行有一个限制:</androidx.constraintlayout.widget.ConstraintLayout>

    即在Android studio中使用ConstraintLayout布局时,再次使用其他的控件时,会报异常,控件下有红色的波浪线

    下面介绍一下五大布局:

    • ConstraintLayout
    • LinearLayout

    Android的日志工具

    Android的日志工具类是Android.util.log,这个类中提供了如下5个方法来供我们打印日志。

    • Log.v : verbose
    • Log.d : debug
    • Log.i : info
    • Log.w :warn
    • Log.e :error
    public static int d(String tag, String msg) {
        return println(LOG_ID_MAIN, DEBUG, tag, msg);
    }
    //  第一个传入当前类名,主要用于打印信息过滤;第二个传入打印具体内容[]()
    //          Log.d("MainActivity","onCreate execute");
    // 信息在logcat中打印
    

  • 相关阅读:
    RabbitMQ 消息可靠性
    SpringBoot2.X+SpringAMQP 整合 RabbitMQ
    《红宝书》 |Array数组介绍及用法
    《红宝书》 |单例内置对象 |Global和Math
    js封装 |随机获取指定范围内的整数
    《红宝书》 |原始包装类型
    《红宝书》 |什么是对象
    js封装 |时间对象相关方法
    兼容 |ios移动端的时间对象
    《红宝书》 |基本引用类型-正则表达式RegExp
  • 原文地址:https://www.cnblogs.com/SsoZhNO-1/p/13971332.html
Copyright © 2011-2022 走看看