Git只更新服务器修改不上传本地修改

IT

在使用Git的时候会遇到本地有一个需要长久的修改,但是不想提交到服务器,但是又想服务器上文件有更新时能同步到本地,这时我们可以使用如下的命令。

忽略文件本地修改

1
git update-index --skip-worktree <file>

撤销忽略

1
git update-index --no-skip-worktree <file>

Git stash用法

IT

git stash 用于缓存当前修改,并且回到最后一次提交状态(切换到HEAD)的操作

相关命令

  1. git stash 用于缓存当前修改,等同于git stash save
  2. git stash list 查看提交的记录
  3. git stash pop 恢复缓存堆栈中最新的一次提交
  4. git stash apply 恢复缓存中所有的提交
  5. git stash drop 后面可以跟着stash名字,移除缓存
  6. git stash clear 删除所有缓存
  7. git stash show 后面可以跟着stash名字显示diff,添加-p或–patch可以查看详细的diff

暂存未跟踪或忽略的文件

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