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

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

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搜索

阅读全文

so库中JNI方法混淆

​​默认情况下,使用JNI时与native对应的JNI函数名都是Java包名(点替换为)类名方法名,使用javah生成的头文件函数名就是这样的格式。这样的格式的so库被反汇编时很容易就找到对应的方法。

1
2
3
4
JNIEXPORT jstring JNICALL Java_com_liuling_ndkjnidemo_JniUtils_getStringFromC
(JNIEnv *env, jclass obj) {
return (jstring)(*env)-> NewStringUTF(env, "I am string from jni");
}

上面是简单的一个JNI方法,我们将生成的so库使用IDA工具进行反汇编之后就能看到如下的内容:

在左边很容易就能找到Java_com_liuling_ndkjnidemo_JniUtils_getStringFromC这个方法:

双击该方法就能看到该方法反汇编之后的内容,这里返回的字符串”I am string from jni”就暴露出来了,如果是一些敏感信息比如一些key之类的东西,这样就存在着风险。

阅读全文

Ubuntu下NDK编译环境搭建及在Android Studio中集成NDK

Ubuntu下NDK环境的搭建

NDK下载

首先需要下载NDK编译工具,目前官方最新的NDK版本是r11c,为了保证稳定性,我下的是r11b。

能翻墙的可以从谷歌官网下载,地址为:https://developer.android.com/ndk/downloads/index.html

不能翻墙的也可以从下面网站下载,该网站提供了Android开发各种工具的下载:http://www.androiddevtools.cn/index.html

阅读全文

Android Studio在Gradle中配置NDK编译,覆盖默认NDK编译

默认情况下,存在src/main/jni文件夹时,gradle生成脚本会执行ndk编译生成操作,但是,编译生成方式并不是像以前那样用ndk-build去处理Android.mk Application.mk等进行c/c++代码的编译链接,而是在临时文件路径中重新生成了一份新的mk文件,并以此作为ndk编译项目。

如果我们想自己在jni目录下面建立Android.mk和Application.mk来进行编译,比如在so库中加入log打印功能,则需要在Android.mk中将log库编译到so文件,此时要怎么做呢?

首先在项目gradle文件的android{}中添加如下代码:

1
2
3
4
5
6
sourceSets {
main {
jni.srcDirs = [] //屏蔽gradle的jni生成过程
jniLibs.srcDir 'src/main/libs'
}
}

阅读全文

Android自动化反编译脚本

作为Android开发人员,在开发过程中经常会因为某个原因去反编译某个app。为了方便,这里特意整理了一个反编译的自动化脚本,只需一个命令就可以获取apk文件里面的资源文件,并使用jd-gui工具打开生成的jar文件。省去每次都要手动敲每个工具的命令,有时候忘记了某个命令还得上网搜索,很麻烦。

这里只整理了Linux和Mac两个平台的自动化脚本,Win下的百度能搜索的到。

所需要的工具

1)apktool,功能:反编译出apk所需要的资源文件和布局设置文件等,
下载地址:http://ibotpeaches.github.io/Apktool/install/

2)dex2jar,功能:反编译出jar文件,即apk的源程序文件的字节码,
下载地址:http://code.google.com/p/dex2jar/downloads/list

3)jd-gui 功能:查看反编译出来的jar文件
下载地址:http://jd.benow.ca/

这些工具我都整理好了,下面附了Linux和Mac平台的工具下载链接,并且包含了自动化脚本工具,可以直接下载使用。

阅读全文