Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0b8f27d

Browse files
committed
Merge pull request hehonghui#4 from bboyfeiyu/master
sync
2 parents 84f161b + 407b3db commit 0b8f27d

12 files changed

+1857
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
使用ClassyShark压缩你的项目
2+
---
3+
4+
> * 原文链接 : [Shrinking Your Build With No Rules
5+
and do it with Class(yShark)](https://medium.com/@_tiwiz/shrinking-your-build-with-no-rules-8d9fb88281ac#.z596cgoll)
6+
* 原文作者 : [Roberto Orgiu](https://medium.com/@_tiwiz)
7+
* 译文出自 : [开发技术前线 www.devtf.cn](http://www.devtf.cn)
8+
* 转载声明: 本译文已授权[开发者头条](http://toutiao.io/download)享有独家转载权,未经允许,不得转载!
9+
* 译者 : [XWZack](https://github.com/XWZack)
10+
* 校对者: [Mr.Simple](https://github.com/bboyfeiyu)
11+
* 状态 : 校对中 `
12+
13+
14+
最近,我们的项目中用到了一个重要的框架,它为我们的产品提供了一个非常关键的功能。
15+
16+
你可以想象一下,这个框架的SDK是相当巨大的,它包含**45K的方法**:这足以使我们的项目(已经用到了Support Library和Play Services)产生使用MultiDex分包的冲动。
17+
18+
## 深入引用库
19+
去掉引用库中不需要的部分是相当简单的,但是理解如何修剪上面提到的框架又是另外一回事了:该框架需要作为我们项目的子模块被引入,从而使**4个.so文件和3个.jar包**被正确关联。在特定平台上构建的本地库带有一个.so拓展文件,这个文件通常放置在与系统架构,诸如x86或armeabi有关的文件夹中。
20+
21+
现在唯一的选择就是让这个框架脱离ProGuard的混淆范围,但是这样一来,即便不用MultiDex分包,至少最终APK的大小也会达到将近50MB。也就是说,这样做的效果肯定不理想:每当我们发布更新,所有用户必须下载整个APK,之后APK被解压,并在每个设备上占用更多的空间,而这些空间我们本不需要占用。
22+
23+
## 以前的处理方法
24+
如果放在几个星期前,我们可能会这样处理:用[ApkTool](http://ibotpeaches.github.io/Apktool/)**反编译每个引用库**,手动查找所有的引用,然后用Atom或者Sublime Text浏览每个文件。如果真的这么做了,可能会浪费大量的时间:因为在反编译APK的时候,ApkTool是一个非常棒的工具,但对于这种特殊情况,我们需要一个更灵活,可能也更有帮助的工具。
25+
26+
## ClassyShark介绍
27+
幸运的是,有这样一个工具:[ClassyShark](https://github.com/google/android-classyshark)
28+
这个软件是正是我们所需要的:通过简单地打开菜单根目录的.jar,我们可以很容易地跟踪每个被我们调用的方法的依赖关系,**几乎就像是用IDE浏览源代码**
29+
30+
![我们可以看到一个本地库正在被ClassyShark反编译](https://cdn-images-1.medium.com/max/1000/1*o3JmaZMrKyUjAXJrC7WcKg.png)
31+
32+
例如,通过双击反编译库中声明的类型,就可以轻松地打开了这个类,并跟踪相关的依赖列表。
33+
34+
此外,如果你由于某种原因无法找到想要的文件,通过窗口顶部的大小写敏感的输入框你总能搜到你想要的类。
35+
36+
在ClassyShark的帮助下,我们可以“轻松地”获取我们需要保存的所有依赖,并在很短的时间内为ProGuard添加正确的规则,使我们从令人头疼的手动跟踪依赖链接,甚至编译一遍只是想看看少了哪些引用中解救出来。
37+
38+
## 结语
39+
不幸的是,我们无法摆脱MultiDex库,但我们的确缩小了我们的项目,并且我们**发行版本的APK大小,现在大概13 MB**,相比于初始大小减少了约75%。就算没有完美解决,也算得上是功德圆满了。
40+
41+
感谢我的同事 Giuseppe和我的朋友 Boris, Mario 和 Sebastiano校对这篇文章。
42+
43+
44+
45+
46+
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#Android Studio Tips and Tricks
2+
#Android Studio提示和技巧
3+
> - Jan 6th, 2016
4+
5+
我最近参加了Goolge的[Android Dev Summit](https://androiddevsummit.withgoogle.com/),一个工具组用于交流[Android Studio For Experts](https://www.youtube.com/watch?v=Y2GC6P5hPeA)的地方。这里都是90分钟的会议,分享了大量的Android Studio小窍门。这也让我有了分享我收藏的Android Studio小窍门的想法。
6+
7+
###LANGUAGE INJECTION
8+
9+
曾经是否需要一个JSON类型的String?可能你用一个固定的文本来做为GSON的解析器,你就应该知道管理所有的反斜杠是一个巨大的痛苦。幸运地,IntelliJ有一个叫*Language Injection*的特性,允许你在它自己的编辑器里编辑部分JSON代码,然后它会恰当的插入到你的代码中。
10+
11+
![Intention Action](http://michaelevans.org/images/2016/01/06/fragment_intention.png)
12+
13+
Inject的Language/Reference是一个intention action[^intention action],你可以通过⌥+Return(Win:alt+Enter)启动或⌘+⇧+A(Win:ctrl+shift+A)启动并搜索到它。
14+
15+
![Editing JSON](http://michaelevans.org/images/2016/01/06/fragment_editor.png)
16+
17+
###[CHECK REGEXP](https://xkcd.com/1171/)
18+
19+
这非常类似于最后一个提示,但是如果你选择了一部分代码用于“RegExp”,就会显示一个便捷的测试正则表达式的浮动窗口。
20+
21+
![Editing Regex](http://michaelevans.org/images/2016/01/06/reg_exp_1.png)
22+
23+
![Valid Regex](http://michaelevans.org/images/2016/01/06/reg_exp_2.png)
24+
25+
![Invalid Regex](http://michaelevans.org/images/2016/01/06/reg_exp_3.png)
26+
27+
###SMART(ER) COMPLETION
28+
29+
现在我肯定你已经使用了绝大部分的代码自动完成功能。按下⌥+Space(Win:Ctrl+Space),IntelliJ/Android Studio弹出一个用以完成类、方法、字段名的属性列表,关键字会在列表范围内。但是可曾注意到这个建议好像是依据你输入的字符,而不是表达式实际的类型?好像下边这样:
30+
31+
![Autocomplete](http://michaelevans.org/images/2016/01/06/basic_autocomplete.png)
32+
33+
好了,如果你通过按下⌥+⇧+Space(Win:Ctrl+Shift+Space)使用代码完成,你会看到一个适用于当前表达式内容的的列表。下边的例子,你只会得到用于`BufferedReader`构造函数中的返回`Reader`类型的列表。
34+
35+
![Better Autocomplete](http://michaelevans.org/images/2016/01/06/smart_autocomplete.png)
36+
37+
更酷的是,你可以在其他情况下也可以用这个快捷键,IntelliJ会通过更深入的搜索(搜索静态方法,链式表达式等等)查找到更多提供给你的选项。
38+
39+
![Chained Autocomplete](http://michaelevans.org/images/2016/01/06/chained_autocomplete.png)
40+
41+
###自定义自己的提示和技巧
42+
43+
另一个更酷的特性是Productivity Guide。它统计来你在IntelliJ使用情况,例如,你保存了多少按键或者痛过使用各种各样的快捷键你避免了多少可能存在的bug。也很有助于发现你可能不知道的特性;你可以滚动列表中的未使用过的特性看一看你有哪些错过了!要找到productivity guide,通过`Help -> Productivity Guide`
44+
45+
![Invalid Regex](http://michaelevans.org/images/2016/01/06/productivity_guide.png)
46+
47+
奖金回合-仅INTELLIJ 15
48+
49+
你知道IntelliJ有[它自己的REST client](https://www.jetbrains.com/idea/help/testing-restful-web-services.html)?超好用的可以不用像[Paw](https://luckymarmot.com/paw)或者[Postman](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en)来测试我们的API。
50+
51+
###有任何其他提示或技巧?让我知道吧!
52+
53+
[^intention action]: [Intention Actions](https://www.jetbrains.com/idea/help/intention-actions.html)是在弹出菜单中显示的一些允许你快速修复例如没有导入classes等错误的一些建议。

0 commit comments

Comments
 (0)