时间如是岁月如梭,转眼又一年。这一年悲喜交加,但喜大于悲
时间如是岁月如梭,转眼又一年。这一年悲喜交加,但喜大于悲
Android项目在使用jenkins自动构建过程中,一个比较常用的情况是需要对构建的变体进行选择生成。结合之前读的《巧用Gradle构建Android应用》和网上的一些资料,解决了我在实际项目遇到的两种情况,现记录如下
在实际项目中我们可能需要构建一些小的变动的不同版本,比如生成的Apk在安装之后不需要显示桌面图标(只供第三方调用)。

Gradle的android插件默认支持两种不同类型的构建类型:debug和release。可以通过模块构建文件中的buildTypes定制配置。
1 | buildTypes { |
通过在debug构建类型中配置applicationIdSuffix和versionNameSuffix可以在同一台设备上安装发布版本和调试版本
另外一个构建类型属性debuggable,调试构建类型自动设置为true,其他类型默认为false。
定制允许构建同一个App的多个版本,可以使用productFlavors来声明定制产品
1 | android { |
1 | ext { |
1 | login='user' |
1 | repositories { |
也可以通过命令行提供变量
./gradlew -Plogin=name -Ppass=xxxxx assembleDebug
Android的Gradle插件针对Android应用添加了大量的特性,包括构建类型(build type)、定制(product flavor)、签名管理(signing configuration)、库项目(library project)等
配置项目所需包含的module
1 | buildscript { |
| 动画类型 | 说明 |
|---|---|
| AlphaAnimation | 透明度 |
| ScaleAnimation | 缩放 |
| TranslateAnimation | 平移 |
| RotateAnimation | 旋转 |
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共同决定的。
文/卢思浩 at 2013-04-18 14:47:18
(一)
我有一个很传奇的室友,他基本不翘课,还能一周打三份工。传奇的地方在于,他其中的一份工作会占据他大量的时间,他从下午四点出门工作,可以一直工作到第二天凌晨4点回来,有时候甚至可以工作15个小时。在其他空余的时间里,他也会去餐厅打工,我一度怀疑我身边的这个人是不是地球人,因为在我看来地球人是需要一定的睡眠和休息时间的,然而他似乎不用。对于他这样的生活作息,我们一堆朋友基本都保持着一个态度:太拼命了,这简直是在透支青春。
一次完整事件的传递主要包括三个阶段:分别是事件的分发、拦截、消费。
触摸事件被封装为MotionEvent,包括ACTION_DOWN,ACTION_MOVE, ACTION_UP。
| 功能 | 是否存在该方法 | Activity | View | ViewGroup |
|---|---|---|---|---|
| 分发 | dispatchToucheEvent | 是 | 是 | 是 |
| 拦截 | onInterceptToucheEvent | 否 | 否 | 是 |
| 消费 | onToucheEvent | 是 | 否 | 是 |
2017年11月11日,特别的日子,也发生了一些特别的事
双十一,一个被进化出来光棍节,旋即现在失去了他本来的意愿,沦为了买买买的节日。
也许最开始只是光棍们的宣泄,没有人在总得有些物件吧。但是买买买谁不乐意呢,电商们也是推波助澜,各种“折扣”,红包、活动,愈演愈烈。