Android App开发基础

APP的开发特点

App开发测试的方法

  1. Android Studio创建内置的模拟器
  2. 真实手机测试运行:

    • 使用数据线把手机连接到计算机上
    • 在计算机上安装手机的驱动程序
    • 打开手机的开发者选项并启用USB调试
    • 将连接的手机设为文件传输模式,并允许计算机调试
    • 手机要能正常使用

APP两大技术路线

  • 原生开发:在移动平台上利用官方提供的编程语言(Java、kotlin)、开发工具包(SDK)、开发环境
  • 混合开发:结合原生与H5技术开发混合应用,即将部分APP页面改成内嵌的网页,这样无需升级APP只需覆盖服务器上的网页,即可动态更新APP页面

开发语言

  • java:主要编程语言
  • kotlin:谷歌力推,兼容java
  • c/c++:前两者属于解释型语言(运行时才把程序翻译为机器语言,执行效率偏低),而c/c++属于编译型语言,执行效率更高,借助JNI(Java原生接口),Java代码可以调用c/c++程序(封装好Java方法调用即可)
  • xml:可扩展标记语言,类似于html利用各种标签来表达页面元素,以及元素之间的层级关系及其排列组合。每个xml标签独立的控件对象,标签内部的属性以“android:”开头,表示标准的android属性

APP连接的数据库:android内置SQLite数据库,语法类似mysql,但实际上后端(服务器端)可以用别的数据库

image-20231009204413594.png

APP的工程结构

App工程目录结构

分为两个层次:项目和模块,模块依附于项目,每个项目至少有一个模块,也能拥有多个模块

一般“编译运行App”指的是运行某个模块

如下图,项目为My Application,app是模块,其下又有manifest子目录(下面只有AndroidManifest.xml,app的运行配置文件)、java子目录、res子目录

image-20231009205342068.png

gradle scripts下主要是工程的编译配置文件

  • build.gradle:描述App工程的编译规则
  • proguard-rules.pro:描述java代码的混淆规则
  • gradle.properties:用于配置编译工程的命令行参数,一般无需改动
  • settings.gradle:配置了编译哪些模块
  • local.properties:项目的本地配置文件,工程编译时自动生成,用于描述开发者计算机的环境配置,包括SDK、NDK的本地路径

AndroidManifest.xml

根节点:manifest,它的package属性指定了app的包名,其下有个application节点,包含如下属性

  • android:allowBackup -- 是否允许应用备份
  • android:icon -- 指定App再手机屏幕上显示的图标
  • android:label -- 指定App在手机屏幕上显示的名称
  • android:roundIcon -- 指定App的圆角图标
  • android:supportsRtsl -- 是否支持阿拉伯语/波斯语这种从右往左的文字排列顺序,true为支持
  • android:theme -- 指定app的显示风格

此外还有个activity节点再application下,是活动页面的注册声明,只有正确配置其才能在运行时访问对应的活动页面

App的设计规范

xml文件描述app界面:可以很方便地预览界面效果

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

<TextView
          android:id="@+id/tv_hello"
          android:layout width="wrap content"
          android:layout height="wrap content"
          android:text="Hello World!" />

由于TextView只是个文本视图,标签头和尾之间不会插入其他标记,所以合并,以“/>”结尾;但并非所有都可简化

根节点必须配备“xmlns:android="http://schemmas.android.com/apk/res/adnroid"”,表示指定XML内部的命名空间,有了命名空间,android studio会自动检查各节点的属性名称是否合法,若不合法就提示报错

但是使用XML无法动态刷新某个控件,表达不了复杂业务逻辑,因此需要使用Java

如下为android studio自动生成的空控件java代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);        // 表示直接引用了布局文件的名字activity_main,可以通过调整选择展示的xml文件
    }
}

添加一些Java逻辑代码,运行后文字变化

import android.widget.TextView;
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv_hello = findViewById(R.id.tv_hello);
        tv_hello.setText("你好!");
    }
}

App的活动页面

创建新的App页面

  1. 创建XML文件:layout下new-xml-layout xml file
  2. 创建Java代码:java目录下第一个包右键-new-java class
  3. 注册页面配置:打开AndroidManifest.xml,在application节点内部补充

    <activity android:name=".java文件名"/>

快速生成法:java目录下包名右键-new-activity-empty activity,填写java类名和xml文件名,就能自动完成页面创建

跳转另一个页面

startActivity(new Intent(MainActivity.this, Main2Activity.class));    //从MainActivity跳转到Main2Activity

下面写一个实验:App启动后首页3s后跳转

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv_hello = findViewById(R.id.tv_hello);
        tv_hello.setText("你好!");
    }

    @Override
    protected void onResume() {
        super.onResume();
        goNextPage();
    }

    private void goNextPage() {
        TextView tv_hello = findViewById(R.id.tv_hello);
        tv_hello.setText("你好!3s后起飞!");
        new Handler().postDelayed(mGoNext, 3000);
    }

    private Runnable mGoNext = new Runnable() {
        @Override
        public void run() {
            startActivity(new Intent(MainActivity.this, Main2Activity.class));
        }
    };
}
最后修改:2024 年 01 月 04 日
如果觉得我的文章对你有用,请随意赞赏