Linux压缩及解压命令
tar
解压
1 | # 解压到当前目录 |
压缩
tar可以保留文件的权限信息
1 | $ tar -zcvf kylin-2.5.2.tar.gz kylin |
zip
解压
1 | unzip -o -d /home/sunny myfile.zip |
把myfile.zip文件解压到 /home/sunny/
-o:不提示的情况下覆盖文件;
-d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下;
Android Gradle 常用配置
Gradle 常用配置
签名
当程序中使用了第三方的功能,比如分享、地图时,要求程序必须是已签名的
在Gradle中配置签名后,可以使我们的Debug也带上签名,而不需要使用Build/Generate Signer Apk去编译带签名的APK
- build.gradle
1 | // 在 Android {} 节点下增加 |
- 获得签名文件信息
1 | // 终端命令 |
输出结果
Tips
还可通过在AndroidStudio自带终端中运行./gradlew signingReport
命令获取
- 获得APK签名信息
1 | // 终端命令 |
输出结果
Tips:
${keyAlias}为CN=Android Debug 说明APK未签名
多渠道打包
以友盟为例
- build.gradle
1 | defaultConfig { |
- manifest
1 | <!-- 替换为您应用的推广渠道名称,channel id自定义。--> |
- 编译命令
./gradlew assemble
: 编译所有渠道的Debug和Release./gradlew assembleWandoujia
: 编译豌豆荚的Debug和Release./gradlew assembleWandoujiaDebug
: 编译豌豆荚的Debug./gradlew build
:Tips
貌似Android Studio
上有多渠道打包的插件,但最终还是需要使用命令行
###自定义APK名称
- build.gradle
1 | // 根节点下增加 |
导入包
导入aar、jar、modle
1 | dependencies { |
Tips
+
表示最新的版本号,曾经遇到过在Windows下导入包是输入的时准确的版本号1.0.0
没有问题,到了Mac
上的就提示找不到包,后来改成1.0.+
就好了
导入 *.so
- Android Studio 默认路径:
Project
视图模式下./app/src/main/jniLibs
这是我目前使用的方法,直接把so包放入文件夹即可,不需要其他操作 - 自定义路径
在Eclipse中的习惯是讲so包放入libs文件夹中,这在Android Studio中也可以通过配置Gradle实现
build.gradle1
2
3
4
5
6
7// 在 Android{} 节点下增加
sourceSets {
main {
// jniLibs.srcDirs=['./libs']
jniLibs.srcDirs=['./libs/jniLibs']
}
}
其他配置
- 下载源码及文档
1 | idea { |
完整build.gradle
1 | apply plugin: 'com.android.application' |
gradle bin镜像地址
Ubuntu修复引导
TextInputEditText样式设置
TextInputEditText样式设置
TextInputEditText
是在Design包中MD风格的EditText
。
样式调整
1 | <style name="InputStyle"> |
android:textCursorDrawable
为@null
时光标颜色与textColor
相同,但是目测宽度只有1dp左右,太细了,所以最终还是选择了自定义光标
1 | <?xml version="1.0" encoding="utf-8"?> |
取消底部线
如果要取消TextInputEditText
底部线,在EditText中我们设置background=@null
,但是TextInputEditText
不同,我们需要将TextInputLayout
和TextInputEdit
的backgound
都设置为@null
1 | <android.support.design.widget.TextInputLayout |
利用面向对象来讲解事件分发与上传
首先先来看下基本的套路,第一次看完事件分发后通常是懵逼,但我觉得还是应该先看下。
Android 中当系统捕获事件时,都是由最外层的View
依次向下传递,当然,事件不能总是传递到最后一子View才结束,我们在每一级消息传递时都会对消息做出响应以决定继续分发或者拦截。
Touch事件相关方法 | 方法功能 | View | ViewGroup | Activity |
---|---|---|---|---|
dispatchTouchEvent | 事件调度 | o | √ | √ |
onInterceptTouchEvent | 事件拦截 | × | √ | × |
onTouchEvent | 事件响应 | √ | √ | √ |
Tips
- 表格中的
View
指的是不包含任何子View
的View
,例如TextView
、Button
View
本身是有dispatchTouchEvent
方法的,但是由于没有子View
,也就没有可分发的目标了- 下文中提到的事件消费,均表示事件终结,及在这之后,既不会发送分发,也不会上传
事件调度 dispatchTouchEvent
return true;
事件已被消费,事件结束。retrun false;
事件不再继续分发,呼叫上层控件对其进行消费。return super.dispatchTouchEvent(ev);
事件分发,将被传递到onInterceptTouchEvent
进行处理,(如果是Activity
,则直接向下传递)
Tips
事件分发本身也对事件进行消费
事件拦截 onInterceptTouchEvent
此方法只在ViewGroup中存在return true;
对事件进行拦截,并交由本层控件的onTouchEvent
对事件进行处理retrun false;
不对事件进行拦截,向下分发,传递给子View
的dispatchTouchEvent
处理return super.onInterceptTouchEvent(ev);
默认等同于 return true;
(既然是拦截器,默认功能当然是拦截啦)
事件响应 onTouchEvent
return true;
事件已被消费,事件终结return false;
事件处理后又上传到上层View
,交由上层的View
的onTouchEvent
进行处理return super.onTouchEvent(ev);
默认等同于 return false;
ViewGroup 事件流程图
由于ViewGroup的事件是最全面的,所以图中只画了ViewGroup
Thanks
Android 事件分发机制详解 (这网址现在已经不能用了,心好累)
Processon 免费在线绘图
===
Note
中发现Activity
默认只会将Down向下传递,而Move、Up会在onTouchEvent
中消费,必须要将Down消费后,Move、Up才会向下传递
正文
创建对象
- 老板 Activity
- 主要是派发任务,也就是
dispatchTouchEvent
- 秘书
onTouchEvent
(老板总不能所有事都亲历亲为,所以我们还得有个秘书)
- 主要是派发任务,也就是
- 管理 ViewGroup
- 项目经理
dispatchTouchEvent
也是派发任务 - 部门经理
onInterceptTouchEvent
用于评估项目经理提出的功能可行性及工时 - 技术经理
onTouchEvent
公司技术骨干,有难度的活找他们。
- 项目经理
- 码农 View
- onTouchEvent 由于码农是在公司的最低层,所以咱们没得选
- dispatchTouchEvent 虽然这方法咱现在没用,但咱也总不能当一辈子码农啊
明确功能
- dispatchTouchEvent
return true
对应角色自己就将任务完成了return false
对应角色自己无法下决定,于是请求上级出面解决return dispatchTouchEvent
任务正常派发
- onInterceptTouchEvent
return true/onInterceptTouchEvent
对应角色认为任务不合理,将其驳回return false
任务合理,不驳回
- onTouchEvent
return true
任务执行完成,但没必要汇报上级return false/super.onTouchEvent
本职工作已完成,但你自己并不能决定任务是否已经完成,需要上级验收通过才算真正完成
案例1
某天一位潜在客户来找到老板,说希望实现一个淘宝,预算5W,老板一听,虎躯一震,直接回绝客户,然后就没有下文了。
在这个案例中,老板自己就事情给处理了。
1 | Activity/老板 dispatchTouchEvent return true. |
案例2
- 某天一位潜在客户来找到老板,说希望实现一个淘宝,预算5000W,但是要1个月必须上线第一版,老板一听,时间紧了点,但加加班还是可以搞定的,很快便签好了合同,并将任务派发给了项目经理并特别要求这个项目一定要做好,
- 项目经理立马就将老板的指示传递给了部门经理
- 部分经理并没有提出异议,于是便将任务细化,派发给码农
- 码农表示自己一个月时间肯定做不完啊,于是便向技术经理需求帮助
- 一个月后,技术经理将第一版交到了老板的秘书手里
- 秘书将第一版拿给了老板,并且最终通过了客户验收
1 | Activity/老板 dispatchTouchEvent return dispatchTouchEvent. |
案例3
- 案例2中的客户想老板反映,希望网站的平均并发量可以达到100000/s,老板变将这个任务交给了项目项目经理
- 项目经理由于对技术不是很熟悉,于是便直接将任务交给部门经理评估
- 部门经理收到任务后,认为此需求不合理,找到老板秘书后表示阿里双11的峰值瞬时并发量也不过50000/s
- 老板秘书向老板传到了部门经理的意见
1 | Activity/老板 dispatchTouchEvent return dispatchTouchEvent. |