JackPeng

Keep on going never give up

Android Studio导入Android源码

背景 因为Android官方并没有把所有java层的API暴露给我们,只把希望我们看到的部分封装成Android Sdk供我们开发用,如果我们想深入了解一些东西只能通过从AOSP下载源码了。 下载Android源码 一般步骤如下: Installing Repo $ mkdir ~/bin $ PATH=~/bin:$PATH $ curl https://storage.goog...

Android系统源码目录结构

Android源码目录结构 一级目录 Android 4.0 – Makefile – bionic (bionic C库) – bootable (启动引导相关代码) – build (存放系统编译规则及g...

ViewTreeObserver引发的内存泄漏问题

ViewTreeObserver引发内存泄漏? 项目中业务需要监听ScrollView的滚动状态,实现如下: addOnScrollChangedListener public void initView(){ .... ViewTreeObserver observer = v.getViewTreeObserver(); observer.addOnScrollChangedLi...

mac下多用户使用ssh管理配置

背景 如果你的工作环境中有多个git项目,而且每个项目上git的用户名,邮箱等,都不一样,那么有两种方法,一是使用https的方式,但是这个方式的话,基本每次push的时候,都要输入密码,太麻烦了。所以还是比较喜欢直接使用ssh的方式,本地托管个ssh的密钥。既不要输入密码,也方便配置。 生成ssh key 打开terminal,执行如下命令: ssh-keygen -t rsa -...

android打印调用栈的方法

android打印调用栈的方法 打印调用栈是android平台问题定位的基本方法,如果需要知道谁在调用某个函数,可以在此函数中添加打印调用栈函数,弄清楚函数之间的调用关系。 Java层打印调用栈方法 RuntimeException here = new RuntimeException("here"); here.fillInStackTrace(); Log.w(TAG, "Cal...

软键盘挡住输入框问题的终极解决方案

前言 开发做得久了,总免不了会遇到各种坑。 而在Android开发的路上,『软键盘挡住了输入框』这个坑,可谓是一个旷日持久的巨坑——来来来,我们慢慢看。 入门篇 最基本的情况,如图所示:在页面底部有一个EditText,如果不做任何处理,那么在软键盘弹出的时候,就有可能会挡住EditText。 对于这种情况的处理其实很简单,只需要在AndroidManifest文件中对activi...

Android源代码查看途径

作为一个android coder,多阅读android源码对提高android开发水平是很有帮助的,那么我们可以通过哪些途径查看android源码呢? 1 http://androidxref.com androidxref 还可以查看android的所有版本,只需将 http://androidxref.com/5.0.0_r2 的后缀5.0.0_r2 改成相应的版本即可 2 ...

Webview资源请求的拦截

Webview资源请求的拦截一般有以下几种实现方法: 一 shouldOverrideUrlLoading和loadUrl shouldOverrideUrlLoading方法的官方说明如下: /** * Give the host application a chance to take over the control when a new * url is about to...

mac环境下使用Charles抓包Https请求

用Charles给Android手机抓包 charles是一款在Mac下常用的截取网络封包工具,对Android Http进行抓包,只要对手机设置代理即可,但对Android Https进行抓包还是破费一些功夫,网上的资料解释的也不清楚,今天在这里总结一下,希望对同样遇到问题的朋友带来一些帮助。 原理 Charles实现对Https进行抓包,使用的原理就是中间人技术(man...

Android暗码

什么是暗码? 在android系统中,暗码就是类似这种样式的字符串: ###*#* 如果这样的系统暗码执行,系统会触发下面的方法:(来自 AOSP Android Open Source Project) static private boolean handleSecretCode(Context context, String input) { int len = input.le...