[TOC]
# Bugly 线上行数信息缺失
检查混淆文件中下面这行是否存在,否则行数信息在编译或打包时就已经丢失
```plain
-keepattributes SourceFile,LineNumberTable
```
# Gradle 全局代理配置,提高三方库下载速度
在已经开启 Shadowsocks 代理的前提下,
修改 $HOME/.gradle/gradle.properties 文件,增加如下配置:
```plain
org.gradle.jvmargs=-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080
```
参考[知乎回答](https://www.zhihu.com/question/37810416)
若无 Shadowsocks 代理,可更改中央仓库地址为阿里云的,在项目根目录 build.gradle 修改如下:
```groovy
buildscript {
repositories {
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
}
allprojects {
repositories {
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
}
```
# 解决国内访问 s3.amazonaws.com 服务器慢的问题
日常开发中经常性的需要用到亚马逊服务器(cloud.s3.amazonaws.com)上的资源,但是国内访问亚马逊服务器,基本上没办法下载成功的。
经 Google,发现可以通过设置 host,强制把访问节点从美国定向到香港的办法来解决这个问题。
Windows下,编辑 C:\Windows\System32\drivers\etc\hosts
macOS 下,编辑 /etc/hosts
增加如下解析:
```plain
219.76.4.4 github-cloud.s3.amazonaws.com
```
参考:[https://www.mobibrw.com/2017/6047/comment-page-1](https://www.mobibrw.com/2017/6047/comment-page-1)
# Git 代理配置
为 Git 配置 Socks5 代理:
```plain
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
```
# Android Studio 签名后依旧 INSTALL_PARSE_FAILED_NO_CERTIFICATES 的问题
在 Android 7.0 中引入了一项新的应用签名方案 APK Signature Scheme v2,它能提供更快的应用安装时间和更多针对未授权 APK 文件更改的保护,但在7.0以下版本系统下,有一定概率出现问题(比如我。。)
问题就是出现在这里,因为我一开始只勾选了 V2,没勾选 V1,所以在7.0以上设备正常,7.0以下设备报错:
![](https://ws1.sinaimg.cn/mw690/c14636degy1flmgxm6pgej20hu09bwfo.jpg)
解决方案:
将 V1、V2全部勾选,这种部署方式可以兼容各个版本系统;或者仅勾选 V1,也就是仍使用旧版签名方案来部署应用。
具体可参考 Google 文档:[https://developer.android.com/about/versions/nougat/android-7.0.html#apk_signature_v2](https://developer.android.com/about/versions/nougat/android-7.0.html#apk_signature_v2)
# Android Studio 关闭 AAPT 检查
在 app 模块的 build.gradle 文件进行配置:
```groovy
defaultConfig {
...
aaptOptions{
cruncherEnabled = false
}
}
```
# Ubuntu 中 vi 不能正常使用方向键与退格键的问题
原因:
Ubuntu 预装的是 vim tiny 版本,而我们需要的是 vim full 版本
解决:
```plain
sudo apt-get remove vim-common
sudo apt-get install vim
```
# 修改 aar 包内 class 文件并重新打包
* 将 .aar 文件重命名为 .zip 文件并解压
* 将解压得到的 classes.jar 文件重命名为 .zip 文件并解压
* 替换目标 class 文件
* 压缩 class 文件夹至 classes.jar 文件并重命名为 clasess.jar
* 将刚解压 .aar 文件得到的目录下的 classes.jar 进行替换,并重新压缩重命名为 .aar 文件
# Charles https抓包
参考文档:[https://www.jianshu.com/p/5788b1e8da02](https://www.jianshu.com/p/5788b1e8da02)
1、设置Charles代理
![](https://img.kancloud.cn/70/9d/709d43cc20282dc82aa67ff4af93c52d_783x347.png)
2、手机端设置代理
3、手机端安装证书
打开chrome或者火狐访问 chls.pro/ssl 安装证书,尽量别用系统浏览器,如果下载的证书是后缀名是.pem,请改成.crt
4、测试抓包
5、添加代码(非必需)
如果出现 java.security.cert.CertPathValidatorException: Trust anchor for certification path not found 异常,则需要添加以下代码到项目中:
```xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="user" /> </trust-anchors>
</debug-overrides>
</network-security-config>
```
```xml
<application
<!--其他配置-->
android:networkSecurityConfig="@xml/network_security_config"
tools:targetApi="n">
```
# WebView debug
1、在应用代码中为WebView打开debug开关:
```java
if (!BuildConfig.RELEASE_PUBLISH && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
} else {
WebView.setWebContentsDebuggingEnabled(false);
}
```
2、手机打开USB调试,连接电脑
3、在Chrome地址栏输入:chrome://inspect,界面如下:
![](https://img.kancloud.cn/bf/08/bf08c0812dfebb029e67bb01eea2f45d_588x342.png)
4、点击inspect按钮,即可打开调试页面:
![](https://img.kancloud.cn/94/1b/941b1a790a09e451489f7771ffbd81cf_752x752.png)
注意:
第一次使用可能会出现白屏,使用梯子,或者配置host:
```plain
# inspect
172.217.14.116 chrome-devtools-frontend.appspot.com
172.217.14.116 chrometophone.appspot.com
```
- 导读
- Java知识
- Java基本程序设计结构
- 【基础知识】Java基础
- 【源码分析】Okio
- 【源码分析】深入理解i++和++i
- 【专题分析】JVM与GC
- 【面试清单】Java基本程序设计结构
- 对象与类
- 【基础知识】对象与类
- 【专题分析】Java类加载过程
- 【面试清单】对象与类
- 泛型
- 【基础知识】泛型
- 【面试清单】泛型
- 集合
- 【基础知识】集合
- 【源码分析】SparseArray
- 【面试清单】集合
- 多线程
- 【基础知识】多线程
- 【源码分析】ThreadPoolExecutor源码分析
- 【专题分析】volatile关键字
- 【面试清单】多线程
- Java新特性
- 【专题分析】Lambda表达式
- 【专题分析】注解
- 【面试清单】Java新特性
- Effective Java笔记
- Android知识
- Activity
- 【基础知识】Activity
- 【专题分析】运行时权限
- 【专题分析】使用Intent打开三方应用
- 【源码分析】Activity的工作过程
- 【面试清单】Activity
- 架构组件
- 【专题分析】MVC、MVP与MVVM
- 【专题分析】数据绑定
- 【面试清单】架构组件
- 界面
- 【专题分析】自定义View
- 【专题分析】ImageView的ScaleType属性
- 【专题分析】ConstraintLayout 使用
- 【专题分析】搞懂点九图
- 【专题分析】Adapter
- 【源码分析】LayoutInflater
- 【源码分析】ViewStub
- 【源码分析】View三大流程
- 【源码分析】触摸事件分发机制
- 【源码分析】按键事件分发机制
- 【源码分析】Android窗口机制
- 【面试清单】界面
- 动画和过渡
- 【基础知识】动画和过渡
- 【面试清单】动画和过渡
- 图片和图形
- 【专题分析】图片加载
- 【面试清单】图片和图形
- 后台任务
- 应用数据和文件
- 基于网络的内容
- 多线程与多进程
- 【基础知识】多线程与多进程
- 【源码分析】Handler
- 【源码分析】AsyncTask
- 【专题分析】Service
- 【源码分析】Parcelable
- 【专题分析】Binder
- 【源码分析】Messenger
- 【面试清单】多线程与多进程
- 应用优化
- 【专题分析】布局优化
- 【专题分析】绘制优化
- 【专题分析】内存优化
- 【专题分析】启动优化
- 【专题分析】电池优化
- 【专题分析】包大小优化
- 【面试清单】应用优化
- Android新特性
- 【专题分析】状态栏、ActionBar和导航栏
- 【专题分析】应用图标、通知栏适配
- 【专题分析】Android新版本重要变更
- 【专题分析】唯一标识符的最佳做法
- 开源库源码分析
- 【源码分析】BaseRecyclerViewAdapterHelper
- 【源码分析】ButterKnife
- 【源码分析】Dagger2
- 【源码分析】EventBus3(一)
- 【源码分析】EventBus3(二)
- 【源码分析】Glide
- 【源码分析】OkHttp
- 【源码分析】Retrofit
- 其他知识
- Flutter
- 原生开发与跨平台开发
- 整体归纳
- 状态及状态管理
- 零碎知识点
- 添加Flutter到现有应用
- Git知识
- Git命令
- .gitignore文件
- 设计模式
- 创建型模式
- 结构型模式
- 行为型模式
- RxJava
- 基础
- Linux知识
- 环境变量
- Linux命令
- ADB命令
- 算法
- 常见数据结构及实现
- 数组
- 排序算法
- 链表
- 二叉树
- 栈和队列
- 算法时间复杂度
- 常见算法思想
- 其他技术
- 正则表达式
- 编码格式
- HTTP与HTTPS
- 【面试清单】其他知识
- 开发归纳
- Android零碎问题
- 其他零碎问题
- 开发思路