在经过千辛万苦各种填坑终于安装好了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. 深入学习MySQL 02 日志系统:bin log,redo log,undo log

    上一篇文章中,我们了解了一条查询语句的执行过程,按理说这篇应该讲一条更新语句的执行过程,但这个过程比较复杂,涉及到了好几个日志与事物,所以先梳理一下3个重要的日志,bin log(归档日志).redo ...

  2. UVA 最大面积最小三角形剖分

    点击打开题目 题目大意: 以顺时针或逆时针给出一个简单多边形的n个点的坐标,用n-2条互不相交的,且与边不相交的对角线,分成n-2个三角形,要求其中最大三角形的面积最小 开始还汪星人咬乌龟,无从下口, ...

  3. Windows Server 2016 Active Directory 图文搭建指南

    1. 首先打开Manage --> Add Roles and Features 2. 点击Next 3. 不做修改,点击Next 4. 不做修改,点击Next 5. 选择Active Dire ...

  4. Linux 常用工具openssh之ssh

    前言 ssh是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器 语法 ssh (选项) (参数) 选项 -:强制使用ssh协议版本1: -:强制使用ssh协议版本2 ...

  5. Git详解之服务部署

    前言 到目前为止,你应该已经学会了使用 Git 来完成日常工作.然而,如果想与他人合作,还需要一个远程的 Git 仓库.尽管技术上可以从个人的仓库里推送和拉取修改内容,但我们不鼓励这样做,因为一不留心 ...

  6. SpringBoot系列专栏

    学会使用SpringBoot能够极大地提升Spring应用的开发效率,可以说是目前开发应用Java必需掌握的工具之一,而且SpringBoot也是微服务应用的基础,只有学会了SpringBoot,你才 ...

  7. Java 中的运算符和流程控制

    Java 中的运算符和流程控制 + 面试题 算术运算符 Java 中的算术运算符,包括以下几种: **算术运算符** **名称** **举例** + 加法 1+2=3 - 减法 2-1=1 \* 乘法 ...

  8. bjut校园网自动登录

    主要是懒得每次上网都需要打开网页=.= logon.bat @echo off mode con: cols=40 lines=15 color 0a title 登录ing... rem 获得IP ...

  9. HDU_4456_二维树状数组

    http://acm.hdu.edu.cn/showproblem.php?pid=4456 第一道二维树状数组就这么麻烦,题目要计算的是一个菱形范围内的和,于是可以把原来的坐标系旋转45度,就是求一 ...

  10. java2变量数据类型和运算符

      public class jh_11_加加减减运算符 { public static void main(String[] args) { int a = 5,b =2 ; a ++;// 对自身 ...