欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

App工程结构

程序员文章站 2022-03-12 10:46:24
在经过千辛万苦各种填坑终于安装好了Android Studio之后,在其自带的模拟器上成功运行了第一个APP(hello world),通过这个APP首先研究了一下APP基本的工程结构,从而使后面的开发更加得心应手。 先上HelloWorld工程的目录结构图 从结构图我们可以看到,该工程下面有两个目 ......

在经过千辛万苦各种填坑终于安装好了android studio之后,在其自带的模拟器上成功运行了第一个app(hello world),通过这个app首先研究了一下app基本的工程结构,从而使后面的开发更加得心应手。

先上helloworld工程的目录结构图

App工程结构

 

从结构图我们可以看到,该工程下面有两个目录:一个是app,另一个是gradle scripts。

其中,app又分下面三个子目录

(1)manifests,下面只有一个androidmanifest.xml文件,它是app运行的配置文件

(2)java,下面有com.example.animator.android_learning和com.example.animator.android_learning两个包,分别存放的是app工程的java源代码以及测试用的java代码

(3)res,存放的是app工程的资源文件。它下面又有四个子目录

  ·drawable 存放的是图形描述文件及用户图片

  ·layout 存放的是app页面的布局文件

  ·mipmap 存放的是启动图标

  ·values 存放的是一些常量定义文件,如string型的strings.xml,像素常量dimens.xml、颜色colors.xml、样式定义styles.xml

gradle scripts下面主要是工程的编译配置文件,其中

(1)build.gradle 分为项目级和模块级两种,用于描述app工程的编译规则

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

(3)gradle.properties 用于配置编译工程的命令行参数,一般无需改动

(4)setting.gradles 配置哪些模块在一起编译。初始内容为include ":app",表示只编译app模块

(5)local.properties 项目的本地配置,一般无需改动。改文件是在工程编译时自动生成的,用于描述开发者本机的环境配置,比如sdk的本地路径、ndk的本地路径等

 

关于配置文件build.gradle

下面对原始的build.gradle文件中补充文字注释,方便理解每个参数的用途

apply plugin: 'com.android.application'

android {
    //指定编译用的sdk版本,如21表示使用android5.0编译
    compilesdkversion 21
    //指定编译工具的版本号,这里的头两位必须与compilesdkversion保持一致,具体的版本号可在sdk的安装目录的“sdk\build-tools”下找到
    buildtoolsversion "21.1.1"

    defaultconfig {
        //指定该模块的应用编号,即app的包名,改参数为自动生成,无需改动
        applicationid "com.example.animator.android_learning"
        //指定app适合运行的最小sdk版本号
        minsdkversion 21
        //指定目标设备的sdk版本号,即该app最希望在哪个版本的android上运行
        targetsdkversion 21
        //指定app的应用版本号
        versioncode 1
        //指定app的应用版本名称
        versionname "1.0"
    }
    buildtypes {
        release {
            //指定是否开启代码混淆功能
            minifyenabled false
            //指定代码混淆规则文件的文件名
            proguardfiles getdefaultproguardfile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

//指定app编译的依赖信息
dependencies {
    //指定引用jar包的路径
    compile filetree(dir: 'libs', include: ['*.jar'])
    //指定单元测试编译用的junit版本号
    testcompile 'junit:junit:4.12'
    //指定编译android的高版本支持库
    compile 'com.android.support:appcompat-v7:21.0.2'
}

关于app运行配置androidmanifest.xml

它用于指定app内部的运行配置,是一个xml描述文件,根节点为manifest,根节点的package指定了app的包名,manifest下部分子节点说明如下:

(1)uses-permission 用于声明app运行过程中需要的权限名称,如相机权限、定位权限等

(2)application 用于指定app自身属性,默认值说明如下:

  ·allowbackup 是否允许备份

  ·icon app在手机屏幕上显示的图标

  ·label app在手机屏幕上显示的名称

  ·supportsrtl 设置为true表示允许从右往左的文字排列顺序

  ·theme 指定app的显示风格

 

在代码中操纵控件

首先可以看到helloworld工程的页面布局文件内容如下

<?xml version="1.0" encoding="utf-8"?>
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingbottom="@dimen/activity_vertical_margin"
    android:paddingleft="@dimen/activity_horizontal_margin"
    android:paddingright="@dimen/activity_horizontal_margin"
    android:paddingtop="@dimen/activity_vertical_margin"
    tools:context="com.example.animator.android_learning.mainactivity">

    <textview
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hello world!" />
</relativelayout>

可以看到xml布局文件和html做前端有一些相似,如layout_width类似于html中的width属性,layout_height类似于html中的height属性,textview又和html中的textarea控件相似,由此可见app的布局配置并不难,可以说“开发文档在手天下我有”了。

同时对应的java代码文件如下

package com.example.animator.android_learning;

import android.support.v7.app.actionbaractivity;
import android.os.bundle;

public class mainactivity extends actionbaractivity {

    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.activity_main);
    }
}

通过查找相关资料和教程知道,oncreate方法通过引用布局文件的名字来向app页面填充布局样式,和javascript配合html一样,java也可以通过代码获取id对应下的xml标签(前提是要给xml标签添加id  android:id="@+id/helloworld")

通过代码简单改写textview文字如下

package com.example.animator.android_learning;

import android.graphics.color;
import android.support.v7.app.actionbaractivity;
import android.os.bundle;
import android.widget.textview;

public class mainactivity extends actionbaractivity {

    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.activity_main);
        textview textview= (textview) findviewbyid(r.id.helloworld);
        textview.settext("小赵的第一次操作!");
        textview.settextcolor(color.red);
        textview.settextsize(30);

    }
}

效果如下:

App工程结构