使用jenkins为android工程打包,支持多包名,改资源(踩坑指南)
使用jenkins为android工程打包,支持多包名,改资源(简单上手)
下载安装jenkins
官网地址:https://jenkins.io/
没什么好说的,网上教程一大堆,唯一要做的是要修改jenkins_home目录所在分区,因为将来所有的内容都要放在这里,如果分区太小,指不定哪天就满了,到时就打不了包了。
实践中,发现/home/jenkins目录也要处理一下,我就碰上了/home/jenkins目录占满了根分区,打开发现都是gradle打包时生成的一些缓存,就将/home/jenkins使用ln
命令做了个软连接到另一个分区目录下。
Mac系统的TM快照占了空间导致iTunes不能备份手机
Mac系统的TM快照占了空间导致iTunes不能备份手机
国庆的时候,我的手机被我女票一脚踢掉了2300块,屏幕黑了一个角,iPhone X, OLED屏幕。
本来约到了今天天才吧维修,3点多的时候,打算给手机备个份,就接上线开工了。结果提示空间不足。
我电脑是256GB的MAC,剩余还有170GB,手机也是256GB,使用了有106GB
电脑上打开关于本机,显示剩余170GB,但是用自带的磁盘工具,就显示剩余20GB
在网上查了查资料,都是说time machine的快照占了空间,就把备份关了,空间还是没有释放。
搞不定,打支持电话,结果客服姐姐给我远程指导了一番没有成功,然后让我等一下查一查,过一会一本正经的和我说说:备份不是只备份数据的,256GB的电脑是备不了256的手机的,建议您换一个大容量的电脑。
WTF???难道是因为我穷?
挂了电话,自己继续研究,找到了命令行,在命令行下删除了。
sudo tmutil listsnapshots /
sudo tmutil deletesnapshots
继续备份,成功了。
然后时间赶不上了,好不容易抢到的天才吧,又得推迟了,而且明天已经没有了,约了下周的。
时间机器的本地快照:
https://support.apple.com/zh-cn/HT204015
苹果还号称这个有多屌,说什么用到磁盘的时候,自己就删除了。结果和自家的软件还起了冲突,我关了自动备份重启了5回,都没有删除掉我的快照腾出空间。
另外,主要是因为穷。谁给我点钱我换个512GB的MAC,512应该够了吧。
ListView实现仿知乎广告Item
前言
知乎APP有一个广告效果,是list在滑动的时候,在某一个item显示出一个远大于item的背景,给人一种item是空的感觉,网上已经有了demo,但我看了看全是拿RecyclerView写的,RecyclerView有一个好处就是,它滑动时的回调,可以准确的拿到dx dy。
1 | public void onScrolled(RecyclerView recyclerView, int dx, int dy) |
但是结合我们的项目,还是使用的之前的ListView,如果整个修改成RecyclerView,成本太高,于是就在ListView上尝试的写了一次,稍微记录一下实现方法。
因为我们的Item里面,还有一个类似弹幕的东东,就没有像网上的demo一样直接画drawable,而是采用了LinearLayout来实现。
原理
ListView也有onScroll()方法,不它该方法的回调时给的参数是item的position
1 | onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) |
是否允许创建快捷方式的权限检测
前言
部分手机的权限管理里,会有一个创建快捷方式权限。近期,产品妹子发现360手机助手可以检测到权限并弹出引导提示,符合的机型有,小米,VIVO,华为。于是我们也得加啊。。。
调研
MIUI:
小米手机root方便,root后,直接看到了权限管理的配置的值,小米上,通过AppOpsManager的checkOpNoThrow()可以检测到是否有快捷方式权限。至于op的值是多少,我就不写了,自己查一查。
vivo
找到了vivo的launcher的所有快捷方式所在的ContentProvider,content://com.bbk.launcher2.settings/favorites
遍历了一圈发现了一个字段叫shortcutPermission
,修改了权限后,这个值会有变化。
有趣的是,初始化假如是禁止的情况,它的值是1,但是只要编辑过,就会变化成16(允许),17(禁止),18(询问,部分手机有这个选项)。
Notification通知栏的那些事
应用市场的尔虞我诈(突破华为安装时来源检测)
前言
去年年底的时候,产品妹子拿着一部华为手机来找我们组,这部手机在安装应用的时候,会显示安装来源,同时,对包进行了扫描检测。但是有一个奇怪的现象是,同一款应用,安装过程不同。
- 从我们市场安装,则显示出市场名字,并提示建议从官方市场安装,用户必须勾选允许才能安装,不然只能取消或去华为商店下载。
- 从豌豆荚中安装,显示的是未知来源,没有提示从官方市场安装。
- 从360手机助手、应用宝安装显示出市场名字,提示通过安全检测。
这个安全引导在一定程度上能将我们的流量直接导入到官方市场下载。应用市场就是靠下载、安装的流量转化来赚钱的,而在安装的时候,ROM方就设置一些门槛,将量转化到自己的市场里。而且从上面的结果猜测,360和应用宝明显是走了公关渠道,而豌豆荚则是使用了黑科技。
Android沉浸式状态栏的实现
需求
从API 19开始,也就是android 4.4 kitcat,android开始支持沉浸式状态栏。可以使状态栏看起来和我们的程序浑然一体,不再像之前那样突兀。几个月前,刚好做了个这方面的需求,记录一下踩了的坑。
一共两种类型的沉浸式,一种是将view直接伸到statusbar里去,另一种是直接给statusbar设置一个背景色。其中,有些需要将伸到statusbar里的页面,顶部还有一个类似titlebar的view,有交互,必须保证操作区域没有进入到状态栏中。设置背景色的需求则比较简单,直接换个纯色的背景色。
实现
一顿的搜索前辈们的各种技术文章之后发现,一切效果都是:不理想。可以参考知乎上的一个问答Android 5.0 如何实现将布局的内容延伸到状态栏,网上也找了一些开源类,大多修改状态栏颜色的和布局伸入状态栏的是分开的,没有在一起介绍的。而且发现有些方法中介绍的fitsSystemWindows属性的办法,对我来说简直就是噩梦,布局太复杂,试了好多遍都没成功。
编译Android源码,使用hide api和internal api
前言
因为项目需要,有部分代码调用了Hide api,需要没有被阉割的android.jar。对于5.0以前的系统,这个jar可以从手机的framework.apk中提取,利用dex2jar变成jar,再覆盖SDK中的jar包中相同类名(sdk中有些类不是framework下的,framework只是一个模块,需要覆盖合并)。从5.0以上开始后,这个方法就不行了,必须自己生成jar包来使用。
官方说明
https://source.android.com/source/index.html
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/