在经过千辛万苦各种填坑终于安装好了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. 玩转Django2.0---Django笔记建站基础五(模板)

    第五章 模板 Django作为web框架,需要一种很便利的方法去动态地生成HTML网页,因此有了模板这个概念.模板包含所需HTML的部分代码以及一些特殊语法 Django可以配置一个或多个模板引擎(甚 ...

  2. 机器学习环境配置系列五之keras2

    keras一个大坑就是配置文件的问题,网上会给很多的误导,让我走了很多弯路. 1.安装keras2 conda install keras 2.环境配置 echo ‘{ "epsilon&q ...

  3. 必须掌握的50条Linux基础操作命令

    说明: 根据笔者平时使用情况,并结合参考一些其他资料,精心整理出以下必须掌握的50条Linux基础命令. 命令: 1. ssh 登录到远程主机 $ ssh -l jsmith remotehost.e ...

  4. svg微信公众号推文实现点击显示答案

    svg微信公众号推文实现点击显示答案 大家都知道微信公众号推文不能写js 所以不能加点击事件 其实是对的 确实不能写js 但是点击事件可以用svg写  svg代码可不会隐蔽 下面我直接贴代码 < ...

  5. 【WPF学习】第三十章 元素绑定——绑定到非元素对象

    前面章节一直都在讨论如何添加链接两个各元素的绑定.但在数据驱动的应用程序中,更常见的情况是创建从不可见对象中提取数据的绑定表达式.唯一的要求是希望显示的信息必须存储在公有属性中.WPF数据绑定数据结构 ...

  6. 倒转数组 Leetcode189

    倒转数组 Leetcode189 记录调整数组顺序而不需要另加内存的一种方法: 题目 189. 旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [ ...

  7. <img>和background-img区别

    1. 是否占位 background-image是背景图片,是css的一个样式,不占位 <img />是一个块状元素,它是一个图片,是html的一个标签,占位 2.否可操作 backgro ...

  8. QT透明显示文字

    实现效果: 代码: #ifndef IMAGINIST_H #define IMAGINIST_H #include <QtWidgets/QWidget> #include <Qt ...

  9. LeetCode 664. Strange Printer 奇怪的打印机(C++/Java)

    题目: There is a strange printer with the following two special requirements: The printer can only pri ...

  10. Pycharm2019.1.1永久破解

    声明:不做商业用途,电脑系统win10专业版,亲测有效. 1,下载新版破解补丁+安装包 网盘链接 提取码:hn0u 下载补丁文件 jetbrains-agent.jar 并将它放置到 pycharm安 ...