沉浸式状态栏实现及遇到的坑

Android4.4以前的版本,状态栏都是一块黑色的,个人认为还是比较丑的。自4.4开始,Android已经支持透明状态栏了(俗称沉浸式状态栏)。个人认为支持沉浸式状态栏的app逼格还是比较高的,为了紧跟潮流,我们项目中也准备加入沉浸式状态栏。在实现沉浸式状态栏的过程中踩了不少的坑,特此记录下来。

如何实现状态栏

Android 4.4以上实现方式

Android 4.4版本提供了FLAG_TRANSLUCENT_STATUS,在Activity中加入此flag,可以设置状态栏透明。代码如下:

1
2
3
4
5
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window window = getWindow();
// Translucent status bar
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}

仅仅设置FLAG_TRANSLUCENT_STATUS,你会发现界面上的ToolBar会跑到状态栏上面去,如下图:

阅读全文

2016年小结

16年大事记

  • 和老婆订婚并扯证了,从此加入已婚人士行列
  • 6年的爱情终于有了结晶,家里添了新成员,自己也升级做爸爸了
  • 人生中第一次跳槽,找到了一家目前而言还比较满意的公司
  • 自己家和老丈人家都盖了新房,过年无论去自己家还是老婆家都有新房住了
  • 3月份第一次参加了深圳百公里毅行,走了不到70公里
  • 开始使用随手记记账,并且接触了理财
  • 入手了一个kindle,开启阅读之旅(后面附书单)

17年展望

  • 踏实提升自己的技术实力,争取在公司能够扛起更多的责任
  • 继续坚持定期更新博客
  • 目前唯一的锻炼项目是篮球,属于激烈运动。为了增强体质,还得适当的参加些有氧运动。17年准备养成跑步的习惯,一周慢跑一到两次
  • 在长沙买一套属于自己的房子
  • 坚持看书的习惯,适当输出读书笔记
  • 毕业两年多了还没有和老婆去旅行,17年一定要带老婆去旅行一次
  • 今年的百公里争取走完全程

附:读书清单

2016年已读书单

《Android群英传》
《软技能-代码之外的生存指南》
《把时间当朋友》
《影响力》
《穷爸爸富爸爸》
《牛奶可乐经济学》
《MBA教不了你的创富课》
《寻路中国》
《看见》
《嫌疑人x的献身》
《白夜行》
《解忧杂货店》
《摆渡人》
《追风筝的人》
《偷影子的人》
《活着》
《围城》
《人生》
《孙子兵法》

2017年待读书单

《巨人的陨落》(已读55%)
《经济学原理》 (已读30%)
《经济学通识》 (已读40%)
《生活中的经济学》
《大败局1、2》
《腾讯传》
《百年孤独》
《瓦尔登湖》
《如何说孩子才会听,如何听孩子才会说》
《爱在左,管教在右》
《战争论》
《精进》
……

Jenkins+Gradle实现Android自动化构建

Jenkins简介

Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。目前大部分公司都在使用Jenkins来持续构建。

Jenkins下载与安装配置

Jenkins下载

安装Jenkins有两种方式:
第一种就是下载安装包直接安装,下载地址:http://mirrors.jenkins-ci.org
第二种就是下载war包,放到Tomcat中启动。war包下载地址:http://mirrors.jenkins-ci.org/war/,
或者http://updates.jenkins-ci.org/download/war/
这里因为我电脑上面之前装了Tomcat,所以我使用直接下载war包的方式进行安装。

Jenkins安装

将下载的jenkins.war放到Tomcat下的webapps目录下,然后启动Tomcat。在浏览器中访问”Tomcat访问地址/jenkins”即可安装,因为我的Tomcat装在本机,并且端口为8080,所以访问http://localhost:8080/jenkins/即可进行安装。

Jenkins配置

Jenkins安装之后可以进行用户的权限设置、插件的安装等配置。

阅读全文

《影响力》读书笔记(二)

《影响力》后半部分笔记整理如下:

《影响力》读书笔记(一)

这两天看了下《影响力》前两章,感觉还不错,固将其进行了整理,整理笔记如下图:

git使用小记

git在团队项目中的使用流程

1.首先从一个git远程仓库中clone项目到本地

1
git clone 仓库地址

2.创建开发分支
一般我们写代码不会在master分支上面写,而是新建一个分支

1
git checkout -b test

3.在test分支上面进行代码修改,比如完成某一项功能的开发

4.修改完之后提交代码到test分支

1
2
git add .
git commit -m "your comment"

5.review代码(非必需)
在test分支上面开发完某一个功能之后,建议自己review一下修改的代码,通过与master分支进行对比

6.切换到master分支

1
git checkout master

7.更新master分支

1
git pull (将本地master与服务器最新代码保持一致)

8.重新切换到test分支

1
git checkout test

9.将master代码更新到test分支

1
git merge master(将master分支合并到当前分支)

10.处理完冲突之后将test分支提交到服务器

1
git push origin 分支名

11.提交Merge Request
提交Merge Request之后代码审核组同事会对提交的代码进行审核,没问题则会同意合并请求,将test分支的代码合并到master分支

阅读全文

Ubuntu下adb无法识别手机设备

(1)首先使用lsusb命令,列出所有usb设备的VID、PID号。

1
2
3
4
5
6
7
8
liuling@liuling-PC:~$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 014: ID 2b0e:1768
Bus 001 Device 004: ID 0461:0010 Primax Electronics, Ltd HP Keyboard
Bus 001 Device 003: ID 03f0:094a Hewlett-Packard
Bus 001 Device 009: ID 046d:c053 Logitech, Inc. Laser Mouse
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
liuling@liuling-PC:~$

其中Bus 001 Device 014: ID 2b0e:1768为我插入的手机设备,可以看出VID为2b0e,PID为1768。

(2)在用户的 home 目录下,寻找 .android 目录,如果没有就创建。在 .android 目录下新建一个文件,叫adb_usb.ini, 记住,后缀是 “ini” 哦;添加前面获得的 VID 到 adb_usb.ini 中,如 0xAAAA,注意要加上0x,因为是16进制的。

(3)在 shell 中 分别输入 adb kill-server, adb start-server, adb devices;若能看到 devices 列出,那么就成功了。

JNI与C/C++数据类型的转换

字符数组与jbyteArray

jbyteArray转字符数组

1
2
3
4
int byteSize = (int) env->GetArrayLength(jbyteArrayData);  //jbyteArrayData是jbyteArray类型的数据
unsigned char* data = new unsigned char[byteSize + 1];
env->GetByteArrayRegion(jbyteArrayData, 0, byteSize, reinterpret_cast<jbyte*>(data));
data[byteSize] = '\0';

字符数组转jbyteArray

1
2
3
jbyte *jb =  (jbyte*) data;   //data是字符数组类型
jbyteArray jarray = env->NewByteArray(byteSize); //byteSize是字符数组大小
env->SetByteArrayRegion(jarray, 0, byteSize, jb);

阅读全文

JNI崩溃问题定位

一般native代码导致的崩溃问题,奔溃日志提示大概类似这样:

1
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 13261

只有这样而没有详细的调用栈信息,这样我们开发者无法定位到JNI中到底哪一行导致程序崩掉的。根本无法定位问题所在,就更不用说解决问题了。

好在NDK给开发者们提供了ndk-stack工具(在NDK根目录下),我们可以通过ndk-stack工具来查看so库中崩溃的堆栈信息。

NDK编译时已DEBUG模式编译

如果是使用命令行编译,则使用如下语句:

1
ndk-build clean all NDK_DEBUG=1

clean all 的意思是编译之前先清理全部上次编译生成的内容。NDK_DEBUG=1 意思是生成调试版本的文件。加了这个参数后 调试的时候能定位到源码行数。

阅读全文

初次尝试Kotlin

为Android Studio安装kotlin插件

在Android Studio中打开Settings->Plugins->Browse Repositories,输入kotlin搜索

阅读全文