《第一行代码 Android》 笔记一

Android系统架构 :

  1. Linux内核层:底层驱动。
  2. 系统运行层:特性支持,数据存储显示等。
  3. 应用框架层:API
  4. 应用层:应用程序

一、HelloWorld

1、创建项目

  • Name:项目名称
  • packageName:包名
  • savelocation:代码保存位置
  • language:默认选择kotlin
  • Minimum API level:最低支持的Android版本

2、目录结构

选择project结构展示

  • .gradle 和.idea是自动生成的编译相关的缓存。
  • app存放资源和代码
  • gradle项目构建工具,用来打包程序的
  • .gitignore也就是git中不需要参与版本控制
  • build.gradle 顾名思义,就是gradle构建出来的
  • gradle.properties就是vs里面的属性页面,配置gradle
  • gradlew和gradlew.bat在命令行界面执行gradle编译的,其中gradlew是在Linux,gradlew.bat是在windows中的
  • local.properties指定本机的Android SDK目录
  • settings.gradle 指定项目中所以包含的模块。

3、app模块

  • libs链接库,也就是会引用到的第三方jar包,只要把jar包放到libs目录下,就会自动的添加到构建路径当中。
  • androidTest编写Android Test测试用例
  • java放代码的地方,Kotlin也在这里面
  • res资源啊(图片、布局、字符串)
  • AndroidManifest.xml整个Android项目的配置文件,之前提到的四大组件已经权限声明都需要在这里注册。
  • test存放Unit Test
  • .gitignore作用域在app内部的版本控制
  • build.gradle是ap模块的gradle构建脚本,也是用于多项目构建配置
  • proguard-rules.pro其实就是对代码加密。也就是编译之后的混淆规则。

4、AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.helloworld">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"<!--指定应用图标-->
        android:label="@string/app_name"<!--指定应用名称-->
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"><!--MainActivity活动进行注册,没有进行注册的活动不能运行-->
            <intent-filter><!--应用程序入口,也就是点击图标后活动MainActivity首先运行-->
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

5、MainActivity.kt

也就是应用程序可见的部分

package com.example.helloworld

import androidx.appcompat.app.AppCompatActivity//MainActivity集成子AppCompatActivity,Activity是Android系统一个活动的基类,所有活动都必须集成它或者它的子类。而AppCompatActivity就是Activity的子类
import android.os.Bundle

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {//构造函数
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)//在活动中引用布局activity_main
    }
}

Android程序设计是逻辑和视图分离的,也就是说界面不在活动中编写,一般都是在布局文件中编写界面,然后在活动中引用进来。

<?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>

6、项目中的资源

  • drawable开头的都是用来放图片的,也可以创建和mipmap一样的多个文件夹,放置不同分辨率的图片,程序运行时就会自动的选择合适的文件夹下的图片。一般都是放置在xxhdpi文件夹下。
  • mipmap开头的都是用来放图标的。多个是为了兼容各种设备。
  • values开头的都是用来放字符串、颜色、样式等显示设置的
  • layout放布局文件的

string.xml

<resources>
    <string name="app_name">HelloWorld</string>
</resources>
  • 代码文件中R.string.app_name获取
  • 而XML文件中@string/app_name获取

上面string也可以换成drawable、mipmap、layout。

7、build.gradle

最外层的

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    ext.kotlin_version = "1.3.72"
    repositories {
        google()
        jcenter()//repositories声明的jcenter()是一个代码仓库,声明这个之后可以使用任何在jcenter上的开源项目。
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.1"//dependencies闭包中使用classpath声明了一个gradle,之所以要额外声明就是因为gradle并不职位Android项目,因而需要指定


        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

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

allprojects {
    repositories {
        google()
        jcenter()
    }
}

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

 app目录下的:

apply plugin: 'com.android.application'//应用了一个插件,com.android.library表示是一个库模块
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {//android闭包
    compileSdkVersion 30//编译版本
    buildToolsVersion "30.0.1"//构建工具版本

    defaultConfig {//defaultConfig闭包
        applicationId "com.example.helloworld"//项目的包名
        minSdkVersion 28//项目最低兼容的Android版本
        targetSdkVersion 30//已经在测试的版本
        versionCode 1//项目版本号
        versionName "1.0"//项目版本名

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {//buildType闭包,指定安装文件的配置
        release {//release和debug(可不写)
            minifyEnabled false//是否对项目代码进行混淆
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),//指定混淆规则的文件,整个项目的,在Android SDK目录小
             'proguard-rules.pro'//当前项目的混淆规则
        }
    }
}

dependencies {//dependencies闭包 项目依赖关系,本地依赖、库依赖、远程依赖。本地依赖Jar包或者目录添加依赖关系,库依赖对项目中的库模块添加依赖关系,远程依赖对jcenter库上开源项目添加依赖
    implementation fileTree(dir: "libs", include: ["*.jar"])//本地依赖声明,当前libs目录下所有.jar后缀的文件都添加到项目的构建路径当中
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.1'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

}

8、日志工具

Android的日志工具类Log(android.util.Log)5个打印日志的方法:

  • Log.v()--verbose级别最低的日志信息
  • Log.d()--debug级别的调试信息
  • Log.i()--info数据信息
  • Log.w()--warn警告信息
  • Log.e()--error错误信息
package com.example.myfirstapp

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.d("MainActivity", "onCreate execute");//传入两个参数:tag,一般都是当前类名;msg打印的具体内容
    }
}

输入logd、logi、logw然后在按下TAB代码就会自动补全

logt然后按下TAB就会自动生成TAG常量

logcat中有很多过滤器

  • show only selected application只显示当前选中程序的日志。
  • Firebase谷歌提供的分析工具
  • No Filters不适用过滤器
  • Edit Filter Configuration自定义的过滤器

选择data之后oncreate()方法打印日志就不显示了,因为data过滤器只会显示tag为data的日志。

日志 级别

关键字过滤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值