Unit1:Android
unit1
1.安卓版本
最新数据访问维基百科
2008年,android1.0
2011年,android3.0,平板失败
同年10月,android4.0,无差别使用
2014年,android5.0,ART代替Dalvik虚拟机,Android Wear,Android Auto,Android TV,穿戴、汽车、电视。
2015年,android6.0,运行时权限
2016年,android7.0,多窗口模式
2.Android特色
四大组件
- 活动
程序的门面,应用中看到的东西,都放在活动中。
- 服务
后台默默运行,无法看到,即使退出应用,服务任然运行。
- 广播接收器
接受各处广播,比如电话、短信等,也可以发送广播消息。
- 内容提供器
应用程序之间共享数据,读取系统电话簿中的联系人。
系统控件
SQLite数据库
多媒体
地理定位
3.创建开发环境
- JDK
Java软件开发包,包括运行环境,工具集合,开发类库。
- SDK
谷歌提供的Android开发工具包
- Android Studio
4.解析Android目录结构
.grale和.idea
自动生成文件,不需要关心
appbuild
不需要关心
libs jar包存放
srcandroidTest 测试用例,自动化测试
mainjava Java代码存放处
res 资源存放处,drawable图片,layout布局,values字符串
AndroidMainfast.xml 四大组件的注册和配置
test Unit Test 测试.gitignore 模块内版本控制
app.iml标志,不需要关心
build.gradle gradle构建脚本
proguard-rules.pro 混淆规则,不希望代码破解,代码混淆build
编译自动生成文件,不需要关心
gradle gradle wrapper配置文件
.gitignore 版本控制
build.gradle 全局构建脚本
gradle.properties 全局配置文件
gradlew和gradlew.bat 命令行执行gradle命令。.bat是在Windows系统中运行的
HelloWorld.iml标识InteliJ IDEA项目,不改
local.properties指定SDK路径,不改
settings.gradle 引入模块
5.运行解析
1.AndroidMainfest.xml
注册活动,没有在A.xml中注册的活动不能使用。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher" // 图标
android:label="@string/app_name" // 应用名称
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter> // 确定主活动
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
2.Java.xxActivity
MainActivity继承AppCompatActivity(Activity的子类)。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //引入布局的方法
}
}
R.layout.hello_world 获取引用
3.res
- drawable 图片
- mipmap 图标
- layout 布局
- values
- string 字符串
- color 颜色
- stytle 样式
@String/hello_world 获取引用
4.build.gradle
Android Studio采用Gradle构建项目。
Gradle构建工具,基于Groovy领域的特定语言(DSL)声明项目设置,摒弃了XML(如Ant和Maven)繁琐配置
buildscript {
repositories {
google()
jcenter() //代码托管到jcenter上
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.2' //声明一个Gradle插件
}
}
allprojects {
repositories {
google()
jcenter()
}
}
gcenter,代码管理仓库。很多Android开源项目都选择其托管项目
声明Gradle插件,因为Gradle不止Android,Java、C++都可以构建。
apply plugin: 'com.android.application' //应用程序模块,可以直接运行
//也可以添加'com.android.library'库模块,依附于其他程序模块运行
android { // 项目细节配置
compileSdkVersion 29 // 编译版本 29表示Android 10.0
buildToolsVersion "30.0.2" // 构建工具版本
defaultConfig {
applicationId "com.example.unit3listviewtest"
minSdkVersion 15 // 最低兼容
targetSdkVersion 29 // 目标版本测试
versionCode 1 // 项目版本号
versionName "1.0" // 项目版本名
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes { // 生成安装配置
debug { // 测试版安装文件配置,可以忽略不写
}
release { // 正式版安装文件配置
minifyEnabled false // 代码是否混淆
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
// 第一个txt是安卓SDK目录下,所有项目通用的混淆规则
// 第二个pro是当前项目根目录,当前项目的混淆规则
}
}
}
dependencies { // 指定所有项目的依赖关系
implementation fileTree(dir: 'libs', include: ['*.jar']) // 本地依赖,本地lib下的jar包
implementation 'androidx.appcompat:appcompat:1.2.0' // 远程依赖
implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
testImplementation 'junit:junit:4.12' // 声明测试用例库
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
依赖关系分三种
1.本地依赖 本地jar包或目录依赖
2.库依赖 对项目中的库模块添加依赖
3.远程依赖 对jcenter库上的开源项目添加依赖关系,域名:组名:版本号
6.日志工具
android日志工具类Log(android.util.Log),5中方法使用
Log.d(tag,msg)
tag:打印信息过滤,一般当前类名
msg:打印的具体内容__
名称 | 等级 | 解释 |
---|---|---|
Log.v | verbose | 打印琐碎信息 |
Log.d | debug | 打印调试信息 |
Log.i | info | 打印比较重要的信息 |
Log.w | warn | 打印警告信息,潜在需要修复的地方 |
Log.e | error******** | 错误信息,需要尽快修复 |
添加过滤器
过滤器名称 | 作用 |
---|---|
Firebase | 谷歌提供的分析工具 |
No Filters | 没有过滤器,所有的日志显示 |
Edit Filter Configuration | 自定义过滤器 |
Unit1:Android的更多相关文章
- [翻译]开发文档:android Bitmap的高效使用
内容概述 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently",包括大尺寸Bitmap的高效加载,图片的异步加载和数据缓存 ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- Android项目部署时,发生AndroidRuntime:android.view.InflateException: Binary XML file line #168: Error inflating class错误
这个错误也是让我纠结了一天,当时写的项目在安卓虚拟机上运行都很正常,于是当我部署到安卓手机上时,点击登陆按钮跳转到用户主界面的时候直接结束运行返回登陆界面. 当时,我仔细检查了一下自己的代码,并 ...
- 基于命令行编译打包phonegap for android应用 分类: Android Phonegap 2015-05-10 10:33 73人阅读 评论(0) 收藏
也许你习惯了使用Eclipse编译和打包Android应用.不过,对于使用html5+js开发的phonegap应用,本文建议你抛弃Eclipse,改为使用命令行模式,绝对的快速和方便. 一直以来,E ...
- 转载:Android自动化测试- 自动获取短信验证码
前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码. 主要就是实时获取短信信息. android ...
- Android入门(六):Android控件布局属性全解
第一类:属性值为true或falseandroid:layout_centerHrizontal 水平居中 (Hrizontal表示水平)android:layout_centerVertical 垂 ...
- NDK开发历程(一):android native code的调试方法
引用:http://www.cnblogs.com/ychellboy/archive/2013/02/22/2922683.html 使用NDK在android上做开发是一件“痛并快乐着”的差事,之 ...
- 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战
概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...
- Android总结篇系列:Android Intent
Intent在Android中的重要性不言而喻.本文主要总结下Intent使用过程中需要注意的一些问题. 1.隐式Intent AndroidManifest.xml声明时<intent-fil ...
随机推荐
- Java实现token的生成与验证-登录功能
一.token与cookie相比较的优势1.支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的: 2.无状态化,服务端无需存储token,只需要验证token信息是否正确即可,而 ...
- [netty4][netty-transport]netty之nio传输层
[netty4][netty-transport]netty之nio传输层 nio基本处理逻辑 查看这里 Selector的处理 Selector实例构建 NioEventLoop.openSelec ...
- ElasticSearch实战系列七: Logstash实战使用-图文讲解
前言 在上一篇中我们介绍了Logstash快速入门,本文主要介绍的是ELK日志系统中的Logstash的实战使用.实战使用我打算从以下的几个场景来进行讲解. 时区问题解决方案 在我们使用logstas ...
- 关于Java的对象,锁和对象的内存布局、访问定位
1. 对象的创建和分配 创建对象(如克隆.反序列化)通常仅仅一个new关键字,但在虚拟机中,对象的创建的过程需要如下步骤: 类加载检查 先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并 ...
- NameNode和SecondaryNameNode(面试开发重点)
NameNode和SecondaryNameNode(面试开发重点) 1 NN和2NN工作机制 思考:NameNode中的元数据是存储在哪里的? 首先,我们做个假设,如果存储在NameNode节点的磁 ...
- Robotium和Espresso大PK——速度篇
引言 Espresso和Robotium都是android UI自动化测试框架,且都是建立在Android Instrument的基础之上.对于测试人员来说,UI测试应该具备如下三个特点:1. 容易编 ...
- golang time包
1.时间类型 time.Time类型表示时间. func demo() { now := time.Now() //获取当前时间 fmt.Printf("Now:%v\n", no ...
- JAVA指令集——GETSTATIC
(indexbyte1<<8)|indexbyte2——得到index 1,从runtimeconstantpool中取得index处的FieldRef,FieldRef已经解析完成 Fi ...
- frozenset冻结集合函数
1.描述 frozenset()返回一个冻结的集合,冻结后不能添加.删除和修改. set()无序且不重复,是可以变的,有add.remove.扩展:删除重复数据,还可以计算交集.差集.并集等 2.函数 ...
- 使用intellij IDEA远程连接服务器部署项目
由于不想每次打开上传的文件软件,故研究使用intellij IDEA集成 ,下面是我使用的过程的一些记录. 使用intellij 远程连接服务器连接Linux服务器部署项目,方便我们开发测试. 本人使 ...