在Android模拟器中模拟GPS位置

IT

配置Telnet服务

  1. 添加Telnet服务

    操作过程:点击”开始”→”控制器面板”→” 查看方式:类型”则点击”程序”(”查看方式:大图标”则点击”程序和功能”)→ “启动或关闭windows功能”→ 在”Windows功能”界面勾选Telnet服务器和客户端 →最后点击”确定”等待安装。

Android录音冲突

IT

在使用Android的录音功能时会遇到和其他录音应用冲突的问题,比如其他应用录音时启动自己的录音功能会报错,自己的应用如何配合其他录音应用,何时放弃录音权限,何时能获取

  1. Android系统中如果有一个应用在录音,你在调用AudioRecord startRecording方法开启录音是会报错,此时,可以通过方法AudioRecord.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING,来判断自己的应用是否可以正常录音

Android的尺寸单位

IT

在Android开发过程中总会遇到各种尺寸单位(px、dp、dpi)使用和图片文件夹(mdpi、hdpi)存放问题,在此就一些基本概念做一个总结的介绍,以期对此有个充分的认识

Android中的尺寸单位

以荣耀6 plus的屏幕参数作为例子

honor 6 plus参数

英寸(inch) 1 inch = 2.54 cm

主屏尺寸:也就是显示屏幕对角线的距离(英寸)

主屏分辨率:1920x1080像素表示屏幕高度上有1920个像素点,宽度上有1080个像素点

屏幕像素密度:dpi(dots per inch),意思是,对角线每英寸的像素点的个数,计算公式如下:

Android-jenkins自动构建属性配置

IT

Android项目在使用jenkins自动构建过程中,一个比较常用的情况是需要对构建的变体进行选择生成。结合之前读的《巧用Gradle构建Android应用》和网上的一些资料,解决了我在实际项目遇到的两种情况,现记录如下

选择是否隐藏安装图标

在实际项目中我们可能需要构建一些小的变动的不同版本,比如生成的Apk在安装之后不需要显示桌面图标(只供第三方调用)。

  1. 在项目根目录的gradle.properties文件配置一个属性HAS_LANCHER=true用于决定是否需要隐藏图标,内容如图:

Android Gradle构建类型和定制

IT

处理构建类型

Gradle的android插件默认支持两种不同类型的构建类型:debug和release。可以通过模块构建文件中的buildTypes定制配置。

1
2
3
4
5
6
7
8
9
10
11
buildTypes {
release {
minifyEnabled true
shrinkResource true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-debug'
}
}

通过在debug构建类型中配置applicationIdSuffix和versionNameSuffix可以在同一台设备上安装发布版本和调试版本

另外一个构建类型属性debuggable,调试构建类型自动设置为true,其他类型默认为false。

产品定制和变种

定制允许构建同一个App的多个版本,可以使用productFlavors来声明定制产品

1
2
3
4
5
6
7
8
9
10
android {
productFlavors {
arrogant {
applicationId 'xxxx'
}
friendly {
applicationId 'xxxxxx'
}
}
}

Android Gradle发布配置

IT

设置项目属性

  1. Gradle构建文件支持用一个简单的ext(extra)语法定义属性,一次定义全局使用
1
2
3
4
5
6
7
ext {
def AAVersion = '4.0-SNAPSHORT'
}

dependencies {
compile "org.androidannotations:androidannotation-api:$AAVersion"
}
  1. 另外可以使用gradle.properties配置属性
1
2
login='user'
pass='xxxxx'
1
2
3
4
5
6
7
8
9
repositories {
maven {
url 'xxxxxxxx'
credentials {
username login
password pass
}
}
}

也可以通过命令行提供变量
./gradlew -Plogin=name -Ppass=xxxxx assembleDebug

Android开发Gradle基础

IT

Android的Gradle插件针对Android应用添加了大量的特性,包括构建类型(build type)、定制(product flavor)、签名管理(signing configuration)、库项目(library project)等

Android中的Gradle构建文件

  • settings.gradle

配置项目所需包含的module

  • 根目录build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
}
}

allprojects {
repositories {
jcenter()
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}
  1. 配置Android Gradle插件从jcenter仓库下载
  2. allprojects设置所有项目都默认从jcenter仓库下载第三方库
  3. 自定义clean任务,type: Delete表示这个task为Gradle内置的Delete task的一个自定义实现

Android动画机制

IT

Android3.0之前

  • 逐帖动画(Frame animation)
    按照各帖设置的时间顺序播放图片
  • 补间动画(Tween animation)
    只需定义动画的开始和结束这两个关键帖,并指定动画的时间和方式,交由Android系统进行计算。只改变了View的绘制效果,没有改变其真实属性
动画类型 说明
AlphaAnimation 透明度
ScaleAnimation 缩放
TranslateAnimation 平移
RotateAnimation 旋转

View的绘制流程

IT
  • Android的UI管理系统的层级关系
    Activity={PhoneWindow={DecorView={TitleView, ContentView}}}

DecorView是一个应用窗口的根容器,它本质上是一个FrameLayout。DecorView有唯一一个子View,它是一个垂直LinearLayout,包含两个子元素,一个是TitleView(ActionBar的容器),另一个是ContentView(窗口内容的容器)。关于ContentView,它是一个FrameLayout(android.R.id.content),我们平常用的setContentView就是设置它的子View。上图还表达了每个Activity都与一个Window(具体来说是PhoneWindow)相关联,用户界面则由Window所承载

  • 视图绘制的过程分三个步骤,分别为测量(Measure),布局(Layout),绘制(Draw)。

  • MeasureSpec
    表示的是一个32位的整数值,高两位表示测量模式SpecMode,低30位代表测量模式下的大小SpecSize。
    对于普通的View来说,它的MeasureSpec是由它的父视图的MeasureSpec和其自身的LayoutParams共同决定的。

Android触摸事件传递机制

IT

一次完整事件的传递主要包括三个阶段:分别是事件的分发、拦截、消费。

触摸事件被封装为MotionEvent,包括ACTION_DOWN,ACTION_MOVE, ACTION_UP。

触摸事件在各个组件中的方法

功能 是否存在该方法 Activity View ViewGroup
分发 dispatchToucheEvent
拦截 onInterceptToucheEvent
消费 onToucheEvent