首页 > 其他分享 >Android 开发入门(1)| 准备 | 开发环境 | 开发基础

Android 开发入门(1)| 准备 | 开发环境 | 开发基础

时间:2023-03-19 18:44:26浏览次数:58  
标签:xml 入门 -- App 开发 import Android android

0x01 准备

(1)概述

安卓(Android)基于 Linux 内核开发的操作系统,由 Google 等领导开发。

(2)版本

Android 版本号 API 发布时间
Android 14 - 2023
Android 13 33 2022.2
Android 12 31 2021.10
Android 11 30 2020.9
Android 10 29 2019.8
Android 9 28 2018.8
Android 8 26/27 2017.8
Android 7 24/25 2016.8
Android 6 23 2015.9
Android 5 21/22 2014.6
Android 4.4 19/20 2013.9

以上可见 Android 技术迭代非常快,既体现了 Android 开发社区的活跃,也说明了面对新版本的新特性需要不断学习。

(3)开发工具

0x02 第一个项目

(1)创建项目

  1. 选择新建项目

  2. 选择 Phone and Tablet 下的 Empty Activity

    Activity 是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务

  3. 设置:语言为 Java,最低 SDK 为 API 28

  4. 选择完成

  5. 暂时忽略代理连接

(2)创建内置虚拟手机

  1. 在右侧选项卡栏中,选择 Device Manager
  2. 选择 Create device
  3. 选择屏幕尺寸
  4. 选择在该设备安装 Android 11
  5. 完成

异常处理:

(3)观察 App 运行日志

  • log.e:error,错误消息,可能导致程序崩溃的异常
  • log.w:warn,警告信息
  • log.i:info,一般信息
  • log.d:debug,调试信息,可把程序运行时的变量值打印出来,方便跟踪调试
  • log.v:verbose,冗余信息

举例:

// 在 MainActivity.java 中
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 添加下述代码
        Log.d("testTags", "onCreate");
    }
}

执行后打开 Logcat,通过筛选 Debug 信息可以发现以下信息:

202x-xx-xx xx:xx:xx.xxx 7709-7709/com.example.myapplication D/testTags: onCreate

0x03 开发基础

(1)运行环境

  • 在虚拟手机上运行

  • 在真实手机上运行

    1. 在手机上执行以下操作:设置 > 关于手机 > 点击版本号(反复点击直至提示已经打开了开发者模式)

    2. 在开发者选项中,启动 USB 调试

    3. 使用 USB 将手机与电脑连接

    4. 在电脑上执行命令adb devices -l来查看已连接的设备

      adb 为 Android SDK 目录中 platform-tools 内的程序,将其设置为系统变量 adb

      adb:Android Debug Bridge

调试运行原理:

graph LR PC--adb-->A(Android OS<br/>AVD) A--adb-->PC

(2)开发语言

  • App 开发路线:原生开发、混合开发
    • 原生开发包括 Java、Kotlin、C/C++、XML,性能更好
    • 混合开发包括 HTML5、Flutter、React Native 等,可以跨平台
  • Android 官方编程语言:Java、Kotlin

(3)使用数据库

Android 内置了专门的数据库—— SQLite,其语法类似于 MySQL,属于嵌入式数据库

(4)工程结构

  • App 工程分为两个层次:项目、模块

    • 模块依附于项目,项目之下可以由多个模块
    • 每个模块对应实际的 App
  • App 项目分为两类:app、Gradle Scripts

    graph TB a(App 项目)-->b a-->c b(app)-->manifests b-->java b-->res c(Gradle Scripts)-->build.gladle c-->proguard-rules.pro c-->gradle.properties c-->settings.gradle c-->local.properties
    • manifests:仅有 AndroidManifest.xml,是 App 的运行配置文件

      application 节点属性 说明
      android:allowBackup 是否允许应用备份,true 或 false
      android:icon 显示的图标
      android:label 显示的名称
      android:roundIcon 圆角图标
      android:supportRtl 是否支持阿拉伯语等从右到左文字排列顺序
      android:theme 显示风格
    • java:有三个 com.example.myapp 包,第一个存放当前模块 Java 源代码,其他存放测试用

    • res:存放当前模块的资源文件

      • drawable:存放图形描述文件和图片文件
      • layout:存放 App 页面的布局文件
      • mipmap:存放 App 的启动图标
      • values:存放常量定义文件
        • 字符串常量:strings.xml
        • 像素常量:dimens.xml
        • 颜色常量:colors.xml
        • 样式风格定义:styles.xml
    • build.gradle:分为项目级、模块级,描述 App 工程的编译规则

      • 项目级:指定了当前项目的总体编译规则
      • 模块级:指定了当前模块的总体编译规则
    • proguard-rules.pro:描述 Java 代码的混淆规则

    • gradle.properties:配置编译工程的命令行参数

    • settings.gradle:配置了需要编译哪些模块

    • local.properties:项目的本地配置文件

(5)设计规范

  • XML:用于描绘应用界面,类比前端

    在 activity_main.xml 文件中操作

    • 线性布局标签:<LinearLayout></LinearLayout>
      • 命名空间:xmlns:android="http://schemas.android.com/apk/res/android"
      • 布局宽高:android:layout_widthandroid:layout_height
      • 布局位置:android:gravity
      • 填充父容器:match_parent,可以用于填充整个屏幕
      • 布局方向:android:orientation
    • 文本控件:<TextView></TextView>
      • 设置 ID:android:id
      • 自适应:wrap_content
      • 文本内容:android:text
    <?xml version="1.0" encoding="utf-8"?>
    <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">
        
        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello Android" />
    
    </LinearLayout>
    
  • Java:用于控制程序逻辑,类比后端

    在 MainActivity.java 文件中操作

    • 调用布局:

      setContentView(R.layout.activity_main);
      
    • 修改 XML 文件中文本控件中的文本内容

      import android.widget.TextView;
      
      public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              // ...
              TextView textView = findViewById(R.id.textView);
              textView.setText("你好安卓");
          }
      }
      

(6)Activity 的创建与跳转

可以直接右键 package(即com.example.application) 新建项目:/Activity/Empty_Activity

  1. 在 layout 目录下创建 XML 文件

    创建 activity_main2.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout
        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">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/app_name" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    其中,TextView 标签中的 Text 属性值可以在 values/strings.xml 中设置:

    <resources>
        <string name="app_name">My Application</string>
        <string name="text2">Activity Main 2</string>
    </resources>
    

    修改 activity_main.xml,添加按钮用于跳转:

    <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Skip" />
    
  2. 创建与 XML 文件对应的 Java 文件

    创建 MainActivity2.java:

    package com.example.myapplication;
    
    import androidx.annotation.Nullable;
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    
    public class MainActivity2 extends AppCompatActivity {
    
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
        }
    }
    

    修改 MainActivity.java,添加按钮事件:

    package com.example.myapplication;
    
    import // ...
    import android.content.Intent;
    import android.widget.Button
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // ...
            Button button = findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent();
                    intent.setClass(MainActivity.this, MainActivity2.class);
                    startActivity(intent);
                }
            });
        }
    }
    
  3. 在 AndroidManifest.xml 中注册页面配置

    在 application 标签下添加新 activity 标签:

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

-End-

标签:xml,入门,--,App,开发,import,Android,android
From: https://www.cnblogs.com/SRIGT/p/17233904.html

相关文章

  • [LeetCode] 数据结构入门
    数据结构入门217存在重复元素给你一个整数数组nums。如果任一值在数组中出现至少两次,返回true;如果数组中每个元素互不相同,返回false。解法1:两层循环第一层循......
  • Java多线程开发CompletableFuture的应用
    ​做Java编程,难免会遇到多线程的开发,但是JDK8这个CompletableFuture类很多开发者目前还没听说过,但是这个类实在是太好用了,了解它的一些用法后相信你会对它爱不释手(呸渣男,......
  • 嵌入式开发中常用的条件编译
    条件编译命令常见形式:1#ifdef标识符2程序段13#else4程序段25#endif作用:当标识符被#define定义过,则对程序段1进行编译,否则编译程序段2。常用形式2:#ifndef......
  • 前端开发常用工具
    HtmlEmmethtml代码快速生成工具。占位字符生成lorem敲tab键即可自动生成一段占位文本图片占位符生成网址/图片宽度x图片高度支持的网址:http://placeholder......
  • CSS入门
    1.CSS简介CSS的主要使用场景就是美化网页,布局页面。1.1HTML的局限性说起HTML,其实就是个非常单纯的家伙,他只关注内容语义。比如<h1>表明这是一个大标题,<p>表明这是一个......
  • 【Android】Message、Handler、MessageQueue、Looper 详解
    1前言​Handler即处理器,常用于跨线程通讯:线程A和线程B拥有同一个handler对象,在线程A中使用handler的sendMessage()方法发送消息,在线程B中使用handler......
  • 【Android】使用MediaExtractor获取关键帧的时间戳
    1前言使用MediaExtractor、MediaMuxer去掉视频文件中的音频数据中介绍了MediaExtractor类的主要方法,本文主要将使用其advance()和seekTo(timeUs,mode)方法遍......
  • 【Android】使用 ContentObserver 监控统状态信息
    1前言使用ContentProvider实现跨进程通讯中介绍了自定义ContentProvider,为外界提供操作SQLite的接口。但是大多数情况下,服务端的ContentProvider不需要用户编......
  • 【Android】使用ContentProvider实现跨进程通讯
    1前言​ContentProvider即内容提供器,是Android四大组件之一,为App存取数据提供统一的对外接口,让不同的应用之间可以共享数据。​如图,Server端通过Content......
  • 306-Air724UG(4G全网通GPRS)开发-闹钟关机,定时唤醒,引脚唤醒
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/LearnAir724UG"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  1......