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

先上HelloWorld工程的目录结构图

从结构图我们可以看到,该工程下面有两个目录:一个是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
//指定编译工具的版本号,这里的头两位必须与compileSdkVersion保持一致,具体的版本号可在SDK的安装目录的“sdk\build-tools”下找到
buildToolsVersion "21.1.1" defaultConfig {
//指定该模块的应用编号,即APP的包名,改参数为自动生成,无需改动
applicationId "com.example.animator.android_learning"
//指定APP适合运行的最小SDK版本号
minSdkVersion
//指定目标设备的SDK版本号,即该APP最希望在哪个版本的Android上运行
targetSdkVersion
//指定APP的应用版本号
versionCode
//指定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工程结构的更多相关文章

  1. Android开发App工程结构搭建

    本文算是一篇漫谈,谈一谈关于android开发中工程初始化的时候如何在初期我们就能搭建一个好的架构.      关于android架构,因为手机的限制,目前我觉得也确实没什么大谈特谈的,但是从开发的角 ...

  2. Android学习系列(18)--App工程结构搭建

     本文算是一篇漫谈,谈一谈关于Android开发中工程初始化的时候如何在初期我们就能搭建一个好的架构.      关于android架构,因为手机的限制,目前我觉得也确实没什么大谈特谈的,但是从开发的 ...

  3. (转)App工程结构搭建:几种常见Android代码架构分析

    关于Android架构,因为手机的限制,目前我觉得也确实没什么大谈特谈的,但是从开发的角度,看到整齐的代码,优美的分层总是一种舒服的享受的. 从艺术的角度看,其实我们是在追求一种美. 本文先分析几个当 ...

  4. 让你Android开发更简单

    转载:http://www.jianshu.com/p/22ff8b5fdadc 搭建一个新的Android项目,你会怎么做? 每个人对应用框架的理解不相同,但是最终达到的效果应该是一样: ①降低项目 ...

  5. 从零开始搭建架构实施Android项目

    我们先假设一个场景需求:刚有孩子的爸爸妈妈对用照片.视频记录宝宝成长有强烈的意愿,但苦于目前没有一款专门的手机APP做这件事.A公司洞察到市场需求,要求开发团队尽快完成Android客户端的开发.以下 ...

  6. [自己动手玩黑科技] 1、小黑科技——如何将普通的家电改造成可以与手机App联动的“智能硬件”

    NOW, 步 将此黑科技传授予你~ 一.普通家电控制电路板分析 普通家电,其人机接口一般由按键和指示灯组成(高端的会稍微复杂,这里不考虑) 这样交互过程,其实就是:由当前指示灯信息,按照操作流程按相应 ...

  7. android模块化app开发-3远程动态更新插件

    前两章用apkplug框架实现了两个基本的功能,但它们都是在本地安装测试的,在实际开发过程中我们肯定是需要与服务器联网将更新的插件远程推送给用户手机客户端.今天利用apkplug提供的插件托管服务轻松 ...

  8. 移动端混合型App(hybrid app)自动化测试选型与实践

    背景 公司产品的业务已经发展到了移动端,开发选型已经结束,决定使用phonegap做移动端的web应用开发平台.考虑到业务的复杂与多样,移动端的测试同样需要自动化.在网上看了很多,最终锁定了3个移动端 ...

  9. App自动更新之通知栏下载

    见证过博客园的多次升级,你也希望你的软件通过更新发布新特性通知用户吧,是的.这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 1.设计思路,使用Versio ...

随机推荐

  1. python3 密码字典匹配wifi密码,有界面

    界面: 需要先安装一下pywifi模块 代码: # coding:utf-8 from tkinter import * from tkinter import ttk import pywifi f ...

  2. docker 简单使用

    1.docker 命令 docker start nginx https://www.w3cschool.cn/docker/windows-docker-install.html // docker ...

  3. hash模式与history模式

    随着 ajax 的使用越来越广泛,前端的页面逻辑开始变得越来越复杂,特别是spa的兴起,前端路由系统随之开始流行. 从用户的角度看,前端路由主要实现了两个功能(使用ajax更新页面状态的情况下): 记 ...

  4. 使用Python通过SMTP发送邮件

    有些业务可能由于各种各样的原因并不适用于Zabbix监控,这时如果要做到系统出问题能立即发送邮件,就需要自己来写监控脚本了,出问题要实时通过邮件报警,以下案例使用Python脚本实现通过SMTP协议发 ...

  5. Arduino系列之中断函数

    今天我将简单记录中断函数 函数分为外部中断和定时中断 外部中断的定义:一般由外设发出中断请求,如:键盘中断.打印机中断.外部中断需外部中断源发出中断请求才能发中断. 定时中断的定义:是指主程序在运行一 ...

  6. 场景7:带有Linux网桥的提供商网络

    此场景描述了使用带有Linux网桥的ML2插件的OpenStack网络服务的供应商网络实现. 供应商网络通常以灵活性为代价提供简单性.性能和可靠性.与其他场景不同,只有管理员可以管理提供者网络,因为它 ...

  7. 学习Qt的资源-网站、论坛、博客等

    来自<零基础学Qt 4编程>一书的附录 附录C Qt资源 C.1 Qt 官方资源 全球各大公司以及独立开发人员每天都在加入 Qt 的开发社区.他们已经认识到了Qt 的架构本身便可加快应用程 ...

  8. [sphinx]生成文档的工具

    安装: pip install sphinx 新建文档项目 sphinx-quickstart 配置一些设置选项, 生成项目文件 生成html make html .\make.bat html #w ...

  9. HDU_3038_并查集

    http://acm.hdu.edu.cn/showproblem.php?pid=3038 并查集的应用,选择哪个点作为根结点都没关系,多了一个sum数组保存每个点到根节点的和,注意刚开始a减了1, ...

  10. 《Python学习手册 第五版》 -第12章 if测试和语法规则

    本章节的内容,主要讲解if语句,if语句是三大复合语句之一(其他两个是while和for),能处理编程中大多数逻辑运算 本章的重点内容如下: 1.if语句的基本形式(多路分支) 2.布尔表达式 3.i ...