(1)-Android学习笔记之:初识Android系统架构和项目结构
Android系统架构
Android程序结构
创建一个Android项目,为初学便于理解,将程序项目结构切换为Project模式,项目结构如下
.gradle和.idea:这两个目录下放的都是Android Studio自动生成的文件,无需我们关心,也不需要手动编辑。
app:项目中的代码、资源等内容几乎都放在这个目录下,开发工作基本在这个目录下进行。
libs:如果项目引用了第三方jar包,就需要吧这些jar包放在libs目录下,此目录下的jar包都会自动添加到构建目录中。
androidTest:此处是用来编写Android Test测试用例的,可以对项目进行一些自动化测试。
java:此目录防止我们所有Java代码的位置,展开此目录可看到新建此项目适的MyApplicationActivity文件就在里面。
res:这个目录下存放项目使用到的所有图片、布局、字符串等资源。
drawable开头:放图片,drawable和mipmap一样,只是没有自动生成,如果为了兼容各种设备,则需要自己新建drawable-hdpi、drawable-xhdpi、drawable-xxhdpi等文件夹,开发程序时最好将一张图片提供不同分辨率版本,分别放在这些文件夹下,运行时会自动根据当前设备分辨率高低选择加载哪个文件夹图片。如果只有一张图片,则将所有图片放在drawable-xxhdpi下也可以。
layout开头:放布局文件
mipmap开头:放应用图标。(有很多mipmap开头的文件,主要是为了让程序能更好兼容各种设备)
values开头:放字符串、样式、颜色等配置。
AndroidManifest.xml:整个Android项目配置文件,在程序中定义的所有四大组件都要在这个文件中注册,并还可以在文件中给应用程序加权限声明。
test:用来编写Unit Test测试用例,对项目自动化测试的另一种方式
.gitignore:用于将app模块指定的目录或文件排除在版本控制外,作用和外层的类似。
build.gradle:app木块的gradle构建脚本,此文件中会指定很多项目构建相关的配置。
prohiard-rules.pro:用于指定项目代码的混淆规则,当开发完成后打包成安装包文件,如果不希望代码被别人破解,通常会将代码进行混淆,从而让破解这难以阅读。
build:无需关心,包含了编译时自动生成的一些文件
gradle:包含gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否联网下载gradle,编译器默认没有启动,如果需要打开,可点击File--Settings--Build Execution,Deployment-Gradle进行配置更改。
.gitignore:这个文件是用来将制定的目录或文件排除在版本控制之外。
build.gradle:项目全局的gradle构建脚本,通常这个文件的内容不需要修改。
.gradle.properties:全局的gradle配置文件,此处配置的属性会影响项目中所有的gradle编译脚本。
gradlew和gradlew.bat:这两个文件用来在命令行界面执行gradle命令,其中gradlew是在Linux或Mac系统中使用的,gradle.bat实在windows系统中使用的。
local.properties:这个文件用于指定本机中的Android SDK路径,通常是自动生成的,不需要修改。除非本机中的Android SDK位置发生了变化。
MyApplication.iml:iml文件是所有IntelliK IDEA项目都会生成一个文件,(Android Studio是基于IntelliJ IDEA开发的),用于标识这是一个IntelliJ IDEA项目,不需要修改这个文件的任何内容。
settings.gradle:这个文件用于指定项目中所有引用的木块。由于上图项目只有一个app模块,因此此文件也只引用了app这个模块。
Android项目文件分析
首先运行一下刚刚创建的项目。
活动Activity
打开AndroidManifest.xml项目配置文件,可以看到如下代码
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
此段xml代码表示对MainActivity这个活动进行注册,没有在此文件中注册的活动是不能使用的,其中intent-filter中的两行代码最为重要,<action android:name="android.intent.action.MAIN" />和<category android:name="android.intent.category.LAUNCHER" />表示此活动是这个项目的主活动,打开程序首先看到的就是这个活动。
然后我们在main-java-中看看MainActivity.java类,可以看到继承自AppCompatActivity,这是一个向下兼容的Activity,可将各个系统版本增加的特性和功能最低兼容到Android2.1版本,Activity是Android系统提供的一个活动基类,项目中用到的所有活动都必须继承它或它的子类才能拥有活动的特性。然后可以看到有一个onCreate方法,这个方法是在活动呗创建时必定要执行的方法,其中只有两行代码,并没有看到Hello word!字样,那么上图运行时显式的Hello word!是怎么来的呢?
Android程序的设计讲究逻辑和视图分离,因此不推荐直接在活动中直接编写界面,而是在布局文件中编写界面,然后在活动中引用进来。如下代码,在onCreate方法第二行调用了setContentView(R.layout.activity_main),表示当前活动引入一个R/layout目录activity_main布局。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
打开res/layout目录,可以看到activity_main.xml文件,然后切换到Text模式,可以看到一个<TextView>标签下,有一行android:text="Hello World!"。
使用res下的资源
打开res/values/strings.xml文件,内容如下:
<resources>
<string name="app_name">My Application</string>
<string name="action_settings">Settings</string>
</resources>
此处定义了一个应用程序名的字符串,可以使用下面两种方式引用(其中string部分是可以替换的,如果引用图片资源则使用drawable,图标则是mpimap)
● 代码中使用R.string.app_name 可获得此字符串的引用
● xml中通过@string/app_name可以获得此字符串的引用。
详解build.gradle文件
Android使用gradle构建项目,其使用一种基于Groovy的领域特定语言(DSL)来声明项目配置,摒弃了传统的xml(如Ant和Maven)的各种繁琐配置。
前行必备-掌握日志工具的使用
abdroid中提供了一个日志工具类Log,其提供了如下几个方法共我们打印日志。
Log.v() 打印最琐碎、意义最小的日志信息,最低级别
Log.d()打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的,比Log.v()高一级。
Log.i()打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮助你分析用户行为,比Log.d()高一级。
Log.w()打印一些警告信息,提示程序在这个地方可能有潜在的风险,最好修复一下这些出现警告的地方,比Log.i()高一级。
Log.e()打印程序的错误信息,比如程序进入到catch语句中,当有错误信息打印出来时,一般都代表你的程序出现严重问题,必须尽快修复,最高级别。
例:在项目中测试使用。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
Log.d("MainActivity","onCreate excute");
Log.d()方法传入2个参数,第一个是tag一般传入当前类名,主要对打印信息进行过滤,第二个参数是msg,即想打印的具体内容。按shift+F10重新运行,可以看到日志窗口如下,日中不仅可以看到打印日志的内容和tag名,还可以看到程序包名、打印时间和程序的进程号。
(1)-Android学习笔记之:初识Android系统架构和项目结构的更多相关文章
- amazeui学习笔记二(进阶开发1)--项目结构structure
amazeui学习笔记二(进阶开发1)--项目结构structure 一.总结 1.项目结构:是说的amazeui在github上面的项目结构,二次开发amazeui用 二.项目结构structure ...
- Android学习笔记_51_转android 加载大图片防止内存溢出
首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...
- Android学习笔记:对Android应用进行单元测试
第一步:在AndroidManifest.xml中加入如下两段代码: <manifest xmlns:android="http://schemas.android.com/ap ...
- Android学习笔记之:android更新ui的几种经常用法
Android主线程不能运行耗时操作.我们通常是在子线程中运行耗时操作, 我们在运行完耗时操作后,我们一般能够通过下面几种方式来实现ui界面的更新. 首先是布局文件: <LinearLayout ...
- Windows Internals学习笔记(二)系统架构
参考资料: 1. <Windows Internals> 2. http://bestcbooks.com 3. Windows Drive Kit 4. Microsoft Window ...
- ROS学习笔记二:ROS系统架构及概念
本文主要是了解ROS的系统架构.文件夹结构以及工作所需的核心文件. ROS系统架构主要被设计和划分为三部分,每一部分代表一个层级的概念:文件系统级(The filesystem level).计算图级 ...
- Android学习笔记之,调用系统图库,添加自定义字体,屏幕截图
新年开始的第一天就来学习了慕课迎春活动中的Android心愿分享一课,学到了几个知识点,在此记录一下. 1.调用系统图库调用系统图库用的是intent,步骤为弹出系统图库选择器,选择图片后获取到所选择 ...
- Android学习笔记----解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题
同时在工程中引入了多个第三方jar包,导致调用的方法数超过了android设定的65536个(DEX 64K problem),进而导致dex无法生成,也就无法生成APK文件. 解决办法如下: 1.谷 ...
- 【K8S学习笔记】初识K8S 及架构组件
K8S是什么?发展历史 Kubernetes (简称 k8s)是 Google 在2014年开源的,对容器生命周期管理的开源平台,致力于对容器集群提供易于管理.高可用.弹性负载与故障转移的能力,提高服 ...
随机推荐
- [CentOS7]sed 指定字符前后添加内容
指定字符前面添加 sed -i 's/指定的字符/需要添加的字符&/' 文件名称 修改Linux启动配置 将 GRUB_CMDLINE_LINUX="rd.lvm.lv=centos ...
- [Redis-CentOS7]Redis发布订阅操作(七)
发布订阅 发布:打电话 订阅:接电话 订阅频道 127.0.0.1:6379> SUBSCRIBE msg Reading messages... (press Ctrl-C to quit) ...
- Mysql性能优化全揭秘-庖丁解牛
「为什么写」 一直想写数据库相关的文章,最直接的原因是数据库这块我们工作中每天都会用到,也是面试求职绕不开的话题,无论你是何种测试,优秀的数据库能力都会非常加分,最近我在总结数据库性能优化这块内容,性 ...
- rhel6.5安装网络yum源过程
**redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,重启安装其他yum源,再配置其他源.** 本文包括配置本地源及第三方源.第三方源包括:网 ...
- MySql基础补漏笔记
在MySQL教程|菜鸟教程系统复习的时候有一些知识点还没掌握透的或者思维方式还没完全跟上的地方,写了一个笔记,讲道理此笔记对除我之外的任何读者不具有任何实用价值,只针对我在复习MySQL基础过程中的查 ...
- 前端之gojs插件的基本使用
gojs是一个前端插件,可以通过代码动态的生成流程图,各自展示图 参考网址:https://gojs.net/latest/index.html 如果你想使用,需要先下载对应的文件 我们能用的到的其实 ...
- pikachu-跨站脚本漏洞(XSS)
一.跨站脚本漏洞概述 1.1 什么是XSS漏洞? XSS是一种发生在Web前端的漏洞,其危害的对象也主要是前端用户. 1.2 XSS如何攻击? 二.跨站脚本漏洞类型及测试流程 2.1 跨站脚本 ...
- 使用vscode对threejs的本地调试
始终坚信阅读和调试结合的方式,才是学习开源的高效方法 一.老版本调试 遥想当年的threejs(使用版本为r75)还没有CommonJS,对于我这个小白可以拿起大刀大杀四方......(咳.咳. 就是 ...
- 微信小程序入门笔记-账号注册(1)
小程序注册 微信小程序开发之前,必须先有小程序账号,下面是注册步骤: 1.打开网页 微信公众平台https://mp.weixin.qq.com/,点击立即注册按钮 2.注册类型 选择小程序开发 3. ...
- 《HTML&CSS design and build websites》学习笔记(1)
Chapter 1: Structure Chapter 2: Text <head>表示标题,默认显示在第一行. <title>表示抬头,显示在浏览器的标签页,还有窗口栏. ...