无      2018-06-11
# # 为什么要用**buildSrc**: 统一管理+代码提示 我们大部分的安卓工程都包含了很多个模块,每个模块都要配置Android的版本,工程的依赖等等, 而且很多时候这些版本和依赖都是重置的. 这样管理起来就很不方便. 官方推荐的解决方式是`ext`,但是这种方式有一个问题就是没有代码提示,这样,你每次调用的时候还得去打开ext文件拷贝一下才行,如果能加上自动代码提示就完美了啊. #
无      2016-05-25
# 博文 [5分钟搞定android混淆 - 简书](http://www.jianshu.com/p/f3455ecaa56e?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io) [ProGuard](https://stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk-linux/tools/proguard/docs/index.html#manual/examples.html) [ProGuard manual | Troubleshooting | Guardsquare](http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass) [ProGuard详解 - CSDN博客](http://blog.csdn.net/ljd2038/article/details/51308768?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io) # 需要混淆的地方 1. 实体类,用到Gson这类的转换库的时候实体类都需要保留 2. 反射相关:反射都是通过名称去查找的,所以也要保留 3. Native调用相关的类: 这类也是通过名称来对应C层的代码的,所以也要保留(Android默认的proguard文件已经包含) 4. 如果是库工程,可能很多类和方法都需要提供出去,这些都要保留 5. 如果是SDK,主要保留对外接口相关的内容 6. 第三方jar包一般会告诉你他的混淆文件 7. BuildConfig里面都是常量,所以一般编译的时候都被直接写到引用的类里面了,所以这个类不需要留着. # as 3.0 之前工程依赖的坑 如果你通过下面的方式直接依赖工程: ``` compile project(':test') ``` 默认依赖的是release版本.就算你的app工程当前的buildTypes设置的是debug,他依赖的test 库工程也是release版本.这样,如果你的库工程在release版本下开了混淆,那么就要记得写好混淆规则. app中用到的类和方法都要keep住,否则会各种提示找不到方法类啥的. 当然,如果app的当前variant没有开启混淆的话,app中的代码是不会被混淆的. > gradle android 插件3.0之后的版本引入的`dimension`, 这个问题已经没有了. app工程的`debug variant`会自动依赖test工程的`debug variant`. # keep 类型 我们用的最多的应该就是`keep`相关的混淆规则了. [简书|Android混淆从入门到精通](https://www.jianshu.com/p/7436a1a32891) 保留| 防止被移除或者被重命名| 防止被重命名 --|--|-- 类和类成员| -keep| -keepnames 仅类成员| -keepclassmembers| -keepclassmembernames 如果拥有某成员,保留类和类成员| -keepclasseswithmembers|-keepclasseswithmembernames # 官方`proguard-android.txt` gradle混淆配置一般是下面这样的: ``` proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' ``` 说明我们引入了两个混淆文件,一个是本地工程的`proguard-rules.pro`,还有一个是默认的`proguard-android.txt`,这个文件在Android sdk的`tools/proguard`目录下,他包含了一些Android 必须混淆的规则,如下: ``` # This is a configuration file for ProGuard. # http://proguard.sourceforge.net/index.html#manual/usage.html # # This file is no longer maintained and is not used by new (2.2+) versions of the # Android plugin for Gradle. Instead, the Android plugin for Gradle generates the # default rules at build time and stores them in the build directory. -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -verbose # Optimization is turned off by default. Dex does not like code run # through the ProGuard optimize and preverify steps (and performs some # of these optimizations on its own). -dontoptimize -dontpreverify # Note that if you want to enable optimization, you cannot just # include optimization flags in your own project configuration file; # instead you will need to point to the # "proguard-android-optimize.txt" file instead of this one from your # proje
无      2018-03-19
[TOC] 参考:[ARCore|Enable ARCore](https://developers.google.com/ar/develop/java/enable-arcore) # # 三步走 1. 清单文件配置 2. 依赖配置 3. 运行时检测 ## 1. 清单文件配置 设置为`ar required`,也就是要求设备必须支持AR才能运行当前app. ``` ...
无      2018-03-19
[TOC] # 环境配置 参考: [ARCore|Run AR Apps in Android Emulator](https://developers.google.com/ar/develop/java/emulator) 具体步骤如下: 1. 你需要下载并安装[Android Studio 3.1+](https://developer.android.com/studio/previ
无      2018-02-06
# Android Studio Apk Analyzer 这里我们使用 AS3.0版本,因为他的 apk 分析工具更强大. 直接打开或者双击一个已经在左侧文件栏的 apk 文件,如下图: ![](https://leanote.com/api/file/getImage?fileId=5aedacbaab6441442e00701c) 这样,我们立马就可以看到所有的内容(包括 所有的so 包等
无      2017-12-14
# 常用依赖方式 我们最常用的依赖声明有: ``` //依赖文件(批量依赖jar) compile fileTree(include: ['*.jar'], dir: 'libs') //依赖文件(单个文件jar) compile files('libs/normal-1.0.0.jar') //远程依赖(aar或jar) compile 'com.jakewharton:butterknif
无      2017-05-21
# # Android Studio 3.0 支持 AS3.0 原生支持 Kotlin , 只需要在创建工程是选中`Kotlin Support`即可(如下图). 本文针对的是2.x 时候的 Android Kotlin 开发. ![](https://leanote.com/api/file/getImage?fileId=5a4514bfab64413edc00235b) # # 开发环
无      2017-12-13
本文重点讲API在使用时的一些变化.其他比如支持Java8,移除Jack工具链这些特性没有介绍. # # 官方文档 [官方迁移指南|英文版](https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html) [Android Studio 和 Gradle 3.0.0 更新简明指南](http://dr
无      2017-10-04
# 拍照 拍照的基本流程如下: 1. 执行自动对焦(可选):可以保证拍到的照片不会模糊:`camera#autoFocus(callback)` 2. 执行拍照:`camera#takePicture(..,callback)` 3. 重启预览:`camera#startPreview()` 另外注意:自动对焦和拍照都是在完成自定义相机之后(也就是打开预览之后的操作),这些操作都必须在`sta
相机 安卓      2017-09-30
我们要自定义一个相机的基本操作如下: 在合适的时间(如onStart())打开相机和预览: 1. 打开相机(`Camera#open()`) 2. 配置相机参数(`Camera#Parameters`) 3. 配置预览方向(`Camera#setDisplayOrientation()`):保证相机在界面上显示正确 4. 设置预览界面(`Camera#setPreviewDisplay(Su