文章目录

AndroidRookie

Gradle之强制依赖某个第三方库 有更新!

#前言 在之前的一个项目中,compileSdkVersion和targetSdkVersion都是使用的24,都是使用最新的,紧跟潮流嘛,一直是相安无事。直到有一天接入一个第三方的SDK的时候,问题暴露了:第三方SDK仅仅只支持最大22的编译,23及以上他本身的SDK就会直接崩溃。没办法,只能降级项目中的编译版本来兼容他了。这一降,才知道不是那么好办的。 1.创建项目 如上图所示,创建了一个项目,compileSdkVersion、targetSdkVersion都是22,并且引用了一个appcompat-v7:22.2.1包。 2.提升引用appcompat-v7版本 看下图,将v7包提升到了23.2.1,就直接爆出了一个错误。 这个错误,如果单单只是在我们自己的项目中出现,还是很好解决的,要么降低v7的版本和sdk一致,要么就提升sdk版本和v7保持一致。但是,有得时候所引用的v7是在我们引用的开源库中引用的,我们自己的sdk不能提升,也不能修改开源库中的引用版本。 3.其他开源库appcompat-v7高版本 为了方便,我就自己创建了一个library并引用了,并且在lib….

Gradle构建变种(一份源码,多份APK) 有更新!

需求 一份源码,修改API地址,包名,替换桌面图标和一些其他资源文件,生成不同的APK卖给不同的人。 ##PS 篇幅略长,但是绝对全是干货 解决方案 为解决这个问题,我经历了以下三个阶段: 需要几份APK就copy几份源码进行修改。 将整个项目作为module来引用。 使用Gradle的Product Flavors来构建变种。 第一种方案:需要几份APK就copy几份源码进行修改 这是早期做Android开发,仍然是EC横行的时候,很痛苦,需要几份就复制几份,开始简单,但是后期维护 却是特别的痛苦。原因是当出现一个BUG的时候需要修改多次,虽然说修改完成一份,后面只需要复制黏贴,但是也是痛苦,可以想象一下,被繁琐的事情缠绕。 第二种方案:将整个项目作为module来引用 这是我接触到了AS,当时考虑的就是将整个项目改造成为module,创建不同的主项目来引用同一份源码,最终改造到一半,不可行,因为要修改大量的代码,比如: 1. ID不再是final类型的了,switch view.id 之类的方法不能再使用。 第三种方案:使用Gradle的Product Flavors来构….

Linux-JDK安装与配置环境搭建 有更新!

#JDK安装 首先,更新包: yum update 检查服务器上是否已安装旧版本的Java: java -version ##下载安装JDK 前往Oracle Java下载页面,根据你的系统架构找到合适的版本。比如我的系统是Centos 6 x86,找到jdk-8u102-linux-i586.rpm,复制其下载地址,在服务器中下载: wget –no-cookies –no-check-certificate –header “Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie” "http://download.oracle.com/o 在你下载的目录中执行rpm包安装命令: rpm -ivh jdk-8u102-linux-i586.rpm ##环境变量设置 在/etc/profile.d/路径下新建一个文件,名为java.sh: vim /etc/profile.d/java.sh 写入以下语句: #!/bin/bash JAVA_HOM….

Centos 6下MySQL安装与配置 有更新!

卸载掉原有mysql 查看是否安装mysql rpm -qa | grep mysql  // 是否已经安装了mysql数据库 卸载mysql yum remove mysql mysql-server mysql-libs mysql-server; find / -name mysql// 将找到的相关东西delete掉; rpm -qa|grep mysql//(查询出来的东东yum remove掉) 安装 获取可以安装的版本 yum list | grep mysql 自动安装 yum install -y mysql-server mysql mysql-deve 查看刚安装好的mysql-server的版本 rpm -qi mysql-server 配置 启动服务: service mysqld start 开机自启: chkconfig mysqld on chkconfig –list | grep mysql 设置密码: mysqladmin -u root password ‘root’  // 通过该命令….

Centos下 Nginx安装与配置 有更新!

第一步,在/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo: cd /etc/yum.repos.d/ vim nginx.repo 填写如下内容: [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1 保存,则会产生一个/etc/yum.repos.d/nginx.repo文件。 下面直接执行如下指令即可自动安装好Nginx: yum install nginx -y 安装完成,下面直接就可以启动Nginx了: /etc/init.d/nginx start 现在Nginx已经启动了,直接访问服务器就能看到Nginx欢迎页面了的。 如果还无法访问,则需配置一下Linux防火墙。 iptables -I INPUT 5 -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT service iptables….

Android初级进阶之自定义果冻视图(BouncingJellyView)(二) 有更新!

啰嗦废话 本篇为Android初级进阶之自定义果冻视图(BouncingJellyView)(一)的后续篇章。没有看过的赶紧去看看,顺便点个喜欢。 BouncingJellyView 果冻视图,就像果冻一样伸缩弹跳,也叫阻尼效果。这个效果在MIUI上面到处都可以看到。 上一篇文章到现在的间隔已经是足足的三个月时间了,因为期间在待业中,所以没什么心情来写文章,所以拖到了现在,找着了工作,解决了其中的一些小问题,才开始写文章。 我现在的公司是做自己的产品,而且是从零到有得一个过程,所以我会把我在做项目的过程中遇到的问题解决方案及一些自定义的UI控件写成文章和demo,希望大家多多star,多多关注,也为能为我将来增加一些砝码。 效果图 废话不多说 先整两张效果图 区别 上个版本所留下的BUG,应该没有人发现。我这里描述一下:在5.0以上使用ToolBar的时候,不管是上拉还是下拉都是没有问题的,但是在5.0以下的时候就很糟糕了,下拉没有问题,但是上拉却是会遮挡ToolBar,如下图所示: 上个版本中,要使用对应的BouncingJelly才能够达到效果,但是在这个版本中,只需….

Android开发小技巧之不再使用原生的WebView了 有更新!

前言 先来说说Android官方的WebView的版本差异,在Android 4.4以下(不包含4.4)系统WebView底层实现是采用WebKit作为内核,而在Android 4.4及其以上Google 采用了chromium作为内核,虽然是API上面没有什么变化,但是却非常的坑开发者。虽然说更换了chromium之后,是增加了对H5等的一些友好支持,但是还不够啊,各种各样的内存泄露。我也是醉了。而且这种内存泄露还是没办法解决的。 刚开始的时候啥都不懂,认为WebView这那点东西,简单。慢慢的发现:哦,原来webView也是要清除和销毁的啊。哦,原来是WebView内部内存泄露了啊,没办法只能将WebView放进一个单独的进程了。我以为这样就能解决我的问题。 诱因 当时的问题是这样的,我们项目需要用WebView来展示一个url,里面呢,是web版的百度地图。结果就是IOS正常显示,我这边就是不行,于是我各种重写,各种注入JS。最终还是失败了。最后是在微信和UC中查看这个URL,发现真神奇,竟然可以。不知道大家有没有仔细观察,不管是QQ还是微信,打开URL的时候往下拉,都可以看到这….

Android开发小技巧之商品属性筛选与商品筛选 有更新!

#前言 一周一篇文章,果真是不太容易。顺便吐槽一下上周也就是9月5号的文章,几天之内就耗完了我1.4G的空间流量,吓得我都抽搐了。 这个次为大家带来的是一个完整的商品属性筛选与商品筛选。什么意思?都见过淘宝、京东等爱啪啪吧,里面有个商品详情,可以选择商品的属性,然后筛选出这个商品的具体型号,这样应该知道了吧?不知道也没关系,下面会有展示图。 关于商品筛选是有两种方式(至少我只见到两种): 第一种: 将所有的商品的所有属性及详情返回给客户端,由客户端进行筛选。 淘宝用的就是这种。 第二种: 将所有的属性返回给客户端,客户选择完成属性后将属性发送给后台 ,再由后台根据属性筛选出具体商品返回给客户端。 京东就是这样搞的。。 两种方式各有各的好处: 第一种:体验性特别好,用户感觉不到延迟,立即选中立即就筛选出了详情。就是客户端比较费劲。。。 第二种:客户端比较省时间,但是体验性太差了,你想想,在网络不是很通畅的时候,你选择一个商品还得等老半天。 因为当时我没有参加到这个接口的设计,导致一直在变化。。我才不会告诉不是后台不给力,筛选不出来才一股脑的将所有锅甩给客户端。 技术点 流式布局 商….

Android初级进阶之自定义果冻视图 有更新!

前言 上一个周没有写博客,是我太懒,无法坚持。在上一个周,除去工作的任务(迭代版本,修复BUG)之外,我一直在模仿一个UI效果。我呢,算是一个米粉,我前面的博客,有一些效果就是来自MIUI。在MIUI中,很多的列表都具有弹性和粘性,个人觉得这个效果不错,于是就模仿了一下。 本来开始之初是为了将这个效果封装成为一个单独的UI控件,结果写着写着就发现这样是不合理的,于是就放在一旁等待解决方案,先看看实际的效果吧。(前面两个是我项目中的实际效果) 怎么样,看上去效果还是挺可以的吧,不得不说,MIUI在一些小细节上面做得非常不错,很多效果都值得我们深入的进行学习。 注意 本博客最主要的是为了向大家展示一种解决思路,文章中的类表效果用到实际项目中还是有些许问题。 为了方便起见,本文中使用的动画效果来自于JakeWharton大神的NineOldAndroids的支持库,个人非常不建议新手直接就来使用开源库,最起码应该熟悉一些基础。 分析 刚开始的时候,我一直在网上找类似的效果,一直是没有找到。直到我学习完属性动画之后才发现,其实这个效果实现起来是非常的简单。 整个效果看上去分为上拉和….

Android小技巧之无限循环的ViewPager 有更新!

前言 之所以会写着篇文章的原因是我现在项目用运用到了广告轮播(BannerView),当时在赶项目的时候在github上面找到了符合的开 源库 就直接引用了,但是该开源库稍微有点庞大,功能比较繁多。于是在这样的情况之下,我决定自己造轮子。(现在处于项目完善和迭代器,正在重构项目,去除多余的第三方等以减少APK的大小,增加用户的体验度) 效果图如下,为了录制效果,所以将速度加快了。 Step1 在这期间碰到的第一个难点就是ViewPager的无缝循环,于是乎在各种谷歌之下发现都是千篇一律的代码之后依然投入了stackoverflow的怀抱,最终找到了解决无缝循环的两种方式: 第一种: 左右各增加一个页面,造成无缝的假象 第二种: getcount的时候返回Integer.MAX_VALUE,这种方式会创建大量的对象,对于我来说不可取。 Step2 第一种方法实现起来非常的简单,其原理是在Adapter里面实现OnPageChangeListener接口,重写onPageSelected来搞定,假如我有三个页面需要相互切换: A<->B<->C 只要在初始化数据….