• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

chenbaoning

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

Android基础学习

Android基础学习

第1节 Android开发环境搭建

1.1 安装Android Studio和配置环境

https://www.cnblogs.com/chenbaoning/p/17345984.html

1.2 创建工程与模拟器

创建新项目


next


Finish


Finish


创建内置模拟器:

点击右边Create device:默认5.0的屏幕,next


选择Android11,点击R旁边的下载:


下载完毕:


next,默认不用改Finish就可以:


点击OK后:


模拟器生成完毕:


将项目发布到模拟器中:


1.3 观察APP运行日志

Android 采用Log工具打印日志,划分为五个等级:

  • Log.e:表示错误信息;
  • Log.w:表示警告信息;
  • Log.i:表示一般信息;
  • Log.d:表示调试信息,可把程序运行时的变量值打印出来,方便跟踪调试;
  • Log.v:表示冗余信息;

示例:导入库import android.util.Log;

Log.d("ning","onCreate");


第2节 Android APP开发基础

2.1 APP的开发特点

2.1.1 APP的运行环境
  • 在模拟器上运行APP应用
  • 使用真机调试APP
  • 在第三方模拟器运行(例如夜神模拟器)

​ 在夜神模拟器的bin目录下输入nox_adb.exe connect 127.0.0.1:62001,看到下图,打开Android Studio即可

​


2.1.2 APP的开发语言
  1. Java
  2. Kotlin
  3. C/C++
  4. XML
2.1.3 APP连接的数据库

Android里使用SQLite这种嵌入式的数据库

2.2 APP的工程结构

  • APP工程分为两个层次:项目和模块;
  • 模块依附于项目,每个项目至少有一个模块,也能拥有多个模块。
  • 模块对应实际的APP,编译运行的是模块不是项目
2.2.1 APP项目目录说明
  • APP项目目录分两类:app(app模块)、Gradle Scripts;

  • app下有3个子目录,其功能说明如下:

    (1)manifests子目录,下面只有一个XML文件,即AndroidManifest.xml,它是APP的运行配置文件;

    (2)java子目录,下面有3个com.example.项目名的包,第一个存放当前模块的java源代码,后面两个存放测试用的java代码。

    (3)res子目录,存放当前模块的资源文件,下有5个子目录:

    ​ ① drawable目录存放图形描述文件与图片文件;

    ​ ② layout目录存放APP页面的布局文件;

    ​ ③ mipmap目录存放APP的启动图标;

    ​ ④ values目录存放一些常量定义文件,例如字符串常量strings.xml、像素常量dimens.xml、颜色常量 colors.xml、样式风格定义styles.xml等。

    ​ ⑤ xml目录存放

  • Gradle Scripts下主要是工程的编译配置文件,主要有:

    (1)build.gradle,该文件分为项目级与模块级两种,用于描述APP工程的编译规则;

    (2)gradle-wrapper.properties

    (3)proguard-rules.pro,该文件用于描述java代码的混淆规则;

    (4)gradle.properties,该文件用于配置编译工程的命令行参数,一般无须改动;

    (5)settings.gradle,该文件配置了需要编译哪些模块,初始内容为include ‘:app’,表示只编译app模块;

    (6)local.properties,该文件为项目的本地配置文件,在工程编译时自动生成,用于描述开发者电脑的环境配置,包括SDK的本地路径、NDK的本地路径等。

    注:Gradle是一个项目自动化构建工具,帮我们做了依赖、打包、部署、发布、各种渠道的差异管理等工作。类似于JavaWeb里的Maven。


2.2.2 编译配置文件build.gradle

新创建的App项目默认有两个build.gradle,一个是Project项目级别的build.gradle;另一个是Module

模块级别的build.gradle。

项目级别的build.gradle指定了当前项目的总体编译规则,打开该文件在buildscript下面找到

repositories和dependencies两个节点,其中repositories节点用于设置Android Studio插件的网络仓

库地址,而dependencies节点用于设置gradle插件的版本号。由于官方的谷歌仓库位于国外,下载速度

相对较慢,因此可在repositories节点添加阿里云的仓库地址,方便国内开发者下载相关插件。修改之后

的buildscript节点内容如下所示:

buildscript {
    repositories {
        // 以下四行添加阿里云的仓库地址,方便国内开发者下载相关插件
        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'https://maven.aliyun.com/repository/google'}
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin'}
        maven { url 'https://maven.aliyun.com/repository/public'}
        google()
        jcenter()
    }
    dependencies {
        // 配置gradle插件版本,下面的版本号就是Android Studio的版本号
        classpath 'com.android.tools.build:gradle:4.1.0'
    }
}

模块级别的build.gradle对应于具体模块,每个模块都有自己的build.gradle,它指定了当前模块的详细

编译规则。下面给chapter02模块的build.gradle补充文字注释,方便读者更好地理解每个参数的用途。

(完整代码见chapter02\build.gradle)

android {
    // 指定编译用的SDK版本号。比如30表示使用Android 11.0编译
    compileSdkVersion 30
    // 指定编译工具的版本号。这里的头两位数字必须与compileSdkVersion保持一致,具体的版本号可
    在sdk安装目录的“sdk\build-tools”下找到
    buildToolsVersion "30.0.3"
    defaultConfig {
        // 指定该模块的应用编号,也就是App的包名
        applicationId "com.example.chapter02"
        // 指定App适合运行的最小SDK版本号。比如19表示至少要在Android 4.4上运行
        minSdkVersion 19
        // 指定目标设备的SDK版本号。表示App最希望在哪个版本的Android上运行
        targetSdkVersion 30
        // 指定App的应用版本号
        versionCode 1
        // 指定App的应用版本名称
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-androidoptimize.txt'), 'proguard-rules.pro'
        }
    }
}
// 指定App编译的依赖信息
dependencies {
    // 指定引用jar包的路径
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    // 指定编译Android的高版本支持库。如AppCompatActivity必须指定编译appcompat库
    //appcompat库各版本见
    https://mvnrepository.com/artifact/androidx.appcompat/appcompat
    implementation 'androidx.appcompat:appcompat:1.2.0'
    // 指定单元测试编译用的junit版本号
    testImplementation 'junit:junit:4.13'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}

为啥这两种编译配置文件的扩展名都是Gradle呢?这是因为它们采用了Gradle工具完成编译构建操作。

Gradle工具的版本配置在gradle\wrapper\gradle-wrapper.properties,也可以依次选择菜单

File→Project Structure→Project,在弹出的设置页面中修改Gradle Version。注意每个版本的Android

Studio都有对应的Gradle版本,只有二者的版本正确对应,App工程才能成功编译。比如Android

Studio 4.1对应的Gradle版本为6.5,更多的版本对应关系见https://developer.android.google.cn/studi

o/releases/gradle-plugin#updating-plugin。


2.2.3 运行配置文件AndroidManifest.xml

AndroidManifest.xml指定了App的运行配置信息,它是一个XML描述文件,初始内容如下所示:

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

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyFirstApplication"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

            <meta-data
                android:name="android.app.lib_name"
                android:value="" />
        </activity>
    </application>

</manifest>

可见AndroidManifest.xml的根节点为manifest,它的package属性指定了该App的包名。manifest下

面有个application节点,它的各属性说明如下:

  • android:allowBackup,是否允许应用备份。允许用户备份系统应用和第三方应用的apk安装包和应用数据,以便在刷机或者数据丢失后恢复应用,用户即可通过adb backup和adb restore来进行对应用数据的备份和恢复。为true表示允许,为false则表示不允许。
  • android:icon,指定App在手机屏幕上显示的图标。
  • android:label,指定App在手机屏幕上显示的名称。
  • android:roundIcon,指定App的圆角图标。
  • android:supportsRtl,是否支持阿拉伯语/波斯语这种从右往左的文字排列顺序。为true表示支
  • 持,为false则表示不支持。
  • android:theme,指定App的显示风格。

注意到application下面还有个activity节点,它是活动页面的注册声明,只有在AndroidManifest.xml中

正确配置了activity节点,才能在运行时访问对应的活动页面。初始配置的MainActivity正是App的默认

主页,之所以说该页面是App主页,是因为它的activity节点内部还配置了以下的过滤信息:

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

其中action节点设置的android.intent.action.MAIN表示该页面是App的入口页面,启动App时会最先打

开该页面。而category节点设置的android.intent.category.LAUNCHER决定了是否在手机屏幕上显示

App图标,如果同时有两个activity节点内部都设置了android.intent.category.LAUNCHER,那么桌面就

会显示两个App图标。以上的两种节点规则可能一开始不太好理解,读者只需记住默认主页必须同时配

置这两种过滤规则即可。

注:Activity 是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。相当于一个网页,音乐剧中的舞台,一个场景。小程序中的pages。


2.3 APP的设计规范

Android 利用 XML 标记描绘应用界面,使用Java代码书写程序逻辑,从而形成App前后端分离的设计规约,

有利于提高App集成的灵活性。(XML->HTML, Java->JavaScript)

2.3.1 界面设计与代码逻辑

把 App 的界面设计与代码逻辑分开的好处:

  • 使用 XML 文件描述 APP 界面,可以很方便地在 Android Studio 上预览界面效果。
  • 一个界面布局可以被多处代码复用,反过来,一个 Java 代码也可能适配多个界面布局。

2.3.2 利用XML标记描绘应用界面

以线性布局为例:

<?xml version="1.0" encoding="utf-8"?>

<!-- 这是个线性布局,match_parent:与上级视图保持一致-->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"       //宽跟屏幕一样
    android:layout_height="match_parent"      //高跟屏幕一样
    android:orientation="vertical"            //垂直方向
    android:gravity="center">                 //文字居中
	
    <!-- 这是个文本视图,名字叫做tv_hello,显示的文字内容为“Hello World!” -->
    <TextView
        android:id="@+id/tv"                   //id
        android:layout_width="wrap_content"    //宽包裹内容
        android:layout_height="wrap_content"   //高包裹内容
        android:text="Hello World!"/>          //添加文字

</LinearLayout>

效果:


2.3.3 使用Java书写程序逻辑

XML固然表达不了复杂的业务逻辑,这副重担就得交给App后台的Java代码了。Android Studio每次创

建新项目,除了生成默认的首页布局activity_main.xml之外,还会生成与其对应的代码文件

MainActivity.java。赶紧打开MainActivity.java,看看里面有什么内容,该Java文件中MainActivity类的

内容如下所示:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
	}	
}

可见MainActivity.java的代码内容很简单,只有一个MainActivity类,该类下面只有一个onCreate方

法。注意onCreate内部的setContentView方法直接引用了布局文件的名字activity_main,该方法的意

思是往当前活动界面填充activity_main.xml的布局内容。现在准备在这里改动,把文字内容改成中文。

首先打开activity_main.xml,在TextView节点下方补充一行android:id="@+id/tv_hello",表示给它起

个名字编号;然后回到MainActivity.java,在setContentView方法下面补充几行代码,具体如下:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 当前的页面布局采用的是res/layout/activity_main.xml
        setContentView(R.layout.activity_main);
        // 获取名叫tv的TextView控件,注意添加导包语句import
        android.widget.TextView;
        TextView tv = findViewById(R.id.tv);
        // 设置TextView控件的文字内容
        tv.setText("你好,世界");
    }
}

新增的两行代码主要做了这些事情:先调用findViewById方法,从布局文件中取出名为tv_hello的

TextView控件;再调用控件对象的setText方法,为其设置新的文字内容。


2.4 APP的活动页面

2.4.1 创建新的APP页面(Activity创建与跳转)

完整的页面创建过程包括三个步骤:

  1. 在 layout 目录下创建 XML 文件;
  2. 创建与 XML 文件对应的 Java 代码;
  3. 在 AndroidManifest.xml 中注册页面配置。
2.4.2 创建XML文件

右击res目录下面的layout,弹出如图所示的右键菜单,依次选择New→XML→Layout XML File。

在XML创建对话框的Layout File Name输入框中填写XML文件名,例如activity_main2,然后单击窗口

右下角的Finish按钮。之后便会在layout目录下面看到新创建的XML文件activity_main2.xml,双击它即

可打开该XML的编辑窗口,再往其中填写详细的布局内容。

2.4.3 创建与 XML 文件对应的 Java 代码

右击java目录下面的包名,弹出如图所示的右键菜单,中依次选择New→Java Class。

在代码创建窗口的Name输入框中填写Java类名,例如Main2Activity,然后单击窗口下方的OK按钮。之

后便会在Java包下面看到新创建的代码文件Main2Activity,双击它即可打开代码编辑窗口,再往其中填

写如下代码,表示加载来自activity_main2的页面布局。

package com.example.myfirstapplication;

import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity2 extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }
}
2.4.4 在 AndroidManifest.xml 中注册页面配置

创建好了页面的XML文件及其Java代码,还得在项目中注册该页面,打开AndroidManifest.xml,在

application节点内部补充如下一行配置:

<activity android:name=".Main2Activity /">

这样就创建了一个合法的新页面。


2.4.5 页面跳转

从activity_main跳转到activity_main2:

  • 在activity_main.xml中添加按钮:

    <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="跳转到activity_main2"/>
    
  • 在MainActivity.java中添加点击事件:

    package com.example.myfirstapplication;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    //        Log.d("ning","onCreate");            //日志
            TextView tv = findViewById(R.id.tv);      //activity_main.xml中的文字组件id
            tv.setText("你好,世界!");
    
            Button button = findViewById(R.id.button);
    //        点击事件
            button.setOnClickListener(new View.OnClickListener() {
    //            回调方法
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent();        //意图对象
    //                MainActivity.this->上下文
                    intent.setClass(MainActivity.this,MainActivity2.class);        //跳转到MainActivity2
                    startActivity(intent);
                }
            });
        }
    }
    

效果:


2.4.6 快速生成Activity

直接右击java目录下面的包名,弹出如图2-24所示的右键菜单,依次选择New→Activity→Empty Activity。

直接在java目录下的com.example.项目名中创建Empty Activity,就可以自动完成上述步骤。

在页面创建对话框的Activity Name输入框中填写页面的Java类名(例如Main2Activity),此时下方的

Layout Name输入框会自动填写对应的XML文件名(例如activity_main2),单击对话框右下角的Finish

按钮,完成新页面的创建动作。

回到Android Studio左上方的项目结构图,发现res的layout目录下多了个activity_main2.xml,同时

java目录下多了个Main2Activity,并且Main2Activity代码已经设定了加载activity_main2布局。接着打

开AndroidManifest.xml,找到application节点发现多了下面这行配置:

<activity
    android:name=".MainActivity3"
    android:exported="false">
    <meta-data
		android:name="android.app.lib_name"
        android:value="" />
</activity>

检查结果说明,只要填写一个创建页面对话框,即可实现页面创建的3个步骤。

posted on 2023-04-25 16:41  BonnieC  阅读(95)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3