这是从Philippe Breault的系列文章《Android Studio Tips Of the Day》中提取出来的自认为精华的部分。
这些技巧在实际应用中能够非常大的提高工作效率。

关于快捷键

The File Structure Popup

ctrl+f12
此快捷键可以调出当前文件的大纲,并通过模糊匹配快速跳转至指定的方法。
勾选上“show anonymous classes”后其功能相当于Eclipse中的ctrl+o

The Call Hierarchy Popup

ctrl+alt+h
查看某个方法的调用路径。
Android Studio Tips-倍数提高工作效率的Android Studio奇技_第1张图片

Quick Definition Lookup

ctrl+shift+i
不离开当前文件当前类的情况下快速查看某个方法或者类的实现。通过大概预览下调用的方法,可以避免许多未知的坑。

Bookmarks!

如其名,书签。帮助快速回到指定的位置,实际使用中简直爽得不行。
f11
将当前位置添加到书签中或者从书签中移除。

shift+f11
显示有哪些书签。

Find Actions

ctrl+shift+a
对于没有设置快捷键或者忘记快捷键的菜单或者动作(Action),可能通过输入其名字快速调用。神技!!!
例如想要编译,只需要输入"release",则列表框中就会出现"assembleRelease"选项,选择就可以进行编译。

Move Lines Up/Down

alt+shift+up/down
上下移动行,这个没什么好说的,肯定会用到。
Android Studio Tips-倍数提高工作效率的Android Studio奇技_第2张图片

Lines Edit

ctrl+yctrl+x,ctrl+d
删除行,删除并复制行,复制行并粘贴,必备。

VCS Operations Popup

`Alt+``(是1左边的那个键)
此快捷键会显示一个版本管理常用的一个命令,可以通过命令前面的数字或者模糊匹配来快速选择命令。
极大的提高了工作效率,快速提交代码、暂存代码、切分支等操作操作如鱼得水。

Hide All Panels

ctrl+shift+f12
关闭或者恢复其他窗口。在编写代码的时候非常方便的全屏编辑框,可以更加专心的coding...

Rename

shift+f6
重命名变量或者方法名。重构神技。
Android Studio Tips-倍数提高工作效率的Android Studio奇技_第3张图片

条件断点

通过右键断点,可以对一个断点加入条件。只有当满足条件时,才会进入到断点中。调试神技,只对自己关心的情况进行调试,不浪费时间。
Android Studio Tips-倍数提高工作效率的Android Studio奇技_第4张图片

进入调试模式

点击Attach Debugger(即绿色小虫旁边那个)可以快速进入调试而不需要重新部署和启动app。
可以选择为此功能设置一个快捷键或者通过前面提到的Find Actions(ctrl+shift+a)输入"attach"进行调用。

快速查看变量的值

按住Alt点击想要查看的变量或者语句。如果想查看更多,则可以按Alt+f8调出Evaluate Expression窗口来自行输入自定义的语句。

分析堆栈信息

Find Actions(ctrl+shift+a)输入"analyze stacktrace"即可查看堆栈信息。

分析某个值的来源

Find Actions(ctrl+shift+a)输入"Analyze Data Flow to Here",可以查看某个变量某个参数其值是如何一路赋值过来的。
对于分析代码非常有用。

多行编辑

强大的神技之一,用过vim的vim-multiple-cursors或者Sublime Text的多行编辑都不会忘记那种快感! 也许不是平时用得最多的技能,但是却是关键时刻提高效率的工具。
快捷键:Alt+J
Android Studio Tips-倍数提高工作效率的Android Studio奇技_第5张图片

列编辑

在vim中叫作块编辑,同样神技!使用方法:按住Alt加鼠标左键拉框即可
PS:发现Ubuntu下不可用,代替方法为按Alt+Shift+Insert之后拖框选择。
但是经过这么操作之后,神技就大打折扣了。估计是与Ubuntu的快捷键冲突了。

Enter和Tab在代码提示时的区别

看图!

提取方法

有些时候我们在一个方法内部写了过多的代码,然后想要把一些代码提取出来再放在一个单独的方法里,通常我们的做法是复制粘贴,现在我来教给大家一个非常简洁的方法,先看下gif演示吧:

怎么样很方便吧?操作方法很简单,只需要选中一些代码,然后操作快捷键Cmd + Option + M就ok了,Windows是Ctrl + Alt + M







一般来说键盘用的越多鼠标用的越少,那么写起代码来效率就越高;常见的快捷键想必大家都已经掌握,接下来我就分享一些你可能不知道的但确非常实用的快捷键。

下文所有快捷键基于如下keymap
Windows: Default
Linux: Default
OSX: Mac OSX 10.5+

自动补全的时候是Enter还是Tab?

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第6张图片

自动补全enter和tab区别
在使用自动补全的时候 EnterTab的行为还是有一些细微的区别的:

  1. 使用Enter会补全你选择的语句
  2. 使用Tab的话,会替换掉你之前在这里的内容(删除后面的语句直到遇到点号,逗号,分号)

这种情况我们还是会经常遇到的,比如要替换一个资源的ID(R.id.a_xxx_xxx),想必大多数人都是先选择a.xxx_xxx删除,然后输入新的内容,或者相反;其实这时候,用Tab才是最优雅的方式。

快捷键:(在补全的时候)Enter/Tab

返回编辑器窗口

返回编辑器窗口
正在写代码的时候,很多操作会让焦点脱离编辑器;比如 Find Usage, Logcat, 切换到项目结构视图,类型继承树等;如果视图切换了如何快速切回编辑器继续写代码呢?简单的鼠标点一下编辑器就可以了,但其实还有两种选择:

  1. Esc: 让编辑器窗口获取焦点,这时候就可以输入代码了
  2. Shift + Esc: 这个会让编辑器获取焦点,并且顺手帮你把刚刚打开的窗口关闭了。

个人喜欢第二种;Find Usage完毕了,Shift + Esc, 优雅~

  1. Esc: 返回编辑器
  2. Shift + Esc: 返回编辑器并关闭当前窗口

返回上次打开的工具窗口

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第7张图片

返回最后打开的工具窗口
接上面那个功能,如果你 Shift + Esc写了一会儿代码,发现又需要打开刚刚的窗口怎么办?这种场景通常发生在 Logcat这个Tol Window上,看完了日志,写代码,写完代码看日志;如何快速切换?

快捷键:F12

快捷打开窗口

使用数字快捷打开窗口
有木有发现有的窗口上面有个数字?这样的窗口(工具窗)我们可以快捷打开!

  • Mac:Cmd + 数字
  • windows/Linux:Alt + 数字

任意窗口切换

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第8张图片

窗口切换
上面的切换还是无法满足你的要求?记得Mac的 Cmd + Tab,Windows的 Alt/Win + Tab吗?Android Studio也有这个类似的功能,可以让你切换到任意窗口!

在这个切换窗口打开的时候,你可以直接按数字切换到对应的工具窗口,或者输入字母搜索右边的编辑器窗口,如果你需要关闭某个窗口,在上面按BackSpace即可。

快捷键:Ctrl + Tab

隐藏所有窗口

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第9张图片

隐藏所有窗口
好了学了那么多打开窗口的技能,如果你想关闭那些乱七八糟的窗口,安安静静写代码应该怎么办?

  • Mac:CMD + Shift + F12
  • windows/Linux:Ctrl + shift + F12

如果需要恢复所有窗口,再按一次这个快捷键即可。

参数提示

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第10张图片

参数提示
这个功能估计很多人知道了,但是还是提一下。在自动补全以后,如果某个方法参数超级长,你不知道参数是什么怎么办?可以试试这个。

  • Mac:CMD + P
  • win/Linux:Ctrl + P



自动生成变量

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第11张图片

自动生成变量

作为一门静态类型语言,Java是有一定的类型推导能力的;那么你是否经常书写:

12
String testStr = "testStr";List<String> testStrings = new ArrayList<String>();

其实大可不必写那些恼火的类型声明的,一看就知道testStr, testStrings就知道是什么类型,再这么干不就是废话么!好在IDEA给了我们这个能力。尝试一下这个快捷键吧,会给你惊喜。

  • Mac:Cmd + Alt + V
  • Win/Linux:Ctrl + Alt + V

有的童鞋可能会问了:我使用ArrayList, HashMap的时候,习惯类型声明为List,Map等接口,这个自动生成的类型声明还是具体的实现啊,怎么办?这一点IDE已经帮你想到了,试试shift + tab,他会给你一个可以选择的类型列表~

自动提取参数

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第12张图片

自动提取参数

有时候你正在写一个方法的时候发现。哎哟,这个变量最好是当作参数传递进来啊;要做成这么一件事,你必须把这个方法内部所有使用这个局部变量的地方替换,把所有调用这个函数的地方添加参数,繁琐至极!好了有了这个你可以随便玩了:

  • Mac:Cmd + Alt + P
  • Win/Linux:Ctrl + Alt + P

当然,如果你想保留原来的方法,只是搞一个参数不同的方法(重载)出来,可以在弹出的那个对话框里面打勾。

自动提取方法

自动提取方法

写代码的时候是否会发现不知不觉的这个方法已经太长了,适合分解然后提取出一个个子方法;或者是重构的时候看到一个一两千的函数,你是不是头都大了?一般情况下,我们都是把要提取的代码copy出来,然后写一个方法(还要什么该死的方法签名)然后把这段代码复制进来;其实这个过程是机械的,完全可以由IDE完成:

  • Mac:Cmd + Alt + M
  • Win/Linux:Ctrl + Alt + M

如果想改变方法的签名,在对话框里面选择你需要的就可以了~

上面提到了三个快捷键其实是比较类似的,如何记忆呢?

  1. 首先组合键都是Cmd/Ctrl + Alt
  2. 然后提取变量Variable=V,参数Parameters=P,方法Method=M

内联变量/参数/方法

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第13张图片

内联

好了学会了上面那几个快捷键,万一玩high了,比如提取了太多的方法,想“弄回去”,该怎么办呢?这个操作叫他Inline..

  • Mac:Cmd + Alt + N
  • Win/Linux:Ctrl + Alt + M

上面那个图只是参考,其实不仅可以作用于变量,还可以是方法/参数,个人觉得方法inline比较有用。

万能重构键

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第14张图片

万能重构键

静态类型语言重构起来相对容易的,但是通常修改一个地方会牵扯到很多别的地方,我们只有一处一处找到这些编译错误然后手动修复。其实有好多工作是可以自动完成的,比如删除某个方法;先确认有没有人调用(Alt + F7),没有的话把方法体删了,有的话去看看调用的地方再决定怎么办。

但是重构的操作实在是太多了!我们没有办法也没有必要一个个记住,知道这个快捷键即可,我叫他万能重构键:

  • Mac :Ctrl + T
  • Win/Linux:Ctrl + Alt + Shift + T

在Win/Linux上可以考虑把这个快捷键改一下键,一下按四个键臣妾很难做到啊。。

这个重构菜单每一个功能都可以自己去尝试一下,使用之后不好用你来打我。

Select In..

说实话,想不出一个比较好的翻译 :P 干脆使用英文吧。

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第15张图片

Select In..

有没有这样的场景:你在Android Studio打开了一个图片文件(或者别的文件),想在资源浏览器里面查看这图片;在Eclipse里面我想大部分的人是Alt + Enter进入文件属性复制地址,然后在系统资源管理器里面打开;或者装一个EasyExplore插件。在Android Studio里面,这是内建支持的!而且还不止如此!比如你想看看某个文件在包的哪个目录,通常是不是点击Project View上面的那个小圆坐标;用这个快捷键鼠标就能搞定。

快捷键:Alt + F1

弹出的菜单有一系列的选项;按对应的数字就可以选择;其他的菜单有什么功能可以自己尝试一下。

拓展选择

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第16张图片

拓展选择

这个功能应该很多人都知道;但还是说明一下,因为跟下面两个功能跟这个结合起来才有威力。这个功能太强大了,自己去按几遍就能想到很多使用场景了;我相信有了这个功能,你使用鼠标的机会会少很多。

  • Mac:Alt + up/down
  • Win/Linux:ctrl + w / ctrl + shift + w

Surround With..

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第17张图片

Surround With

如果你想把一段代码使用if语句包起来;又或者使用try包围一段可能有运行时异常的代码,你会怎么干?

首先用光标定位到代码块开头,写上try {然后,光标代码块末尾加上} catch (XXXRuntimeException e) {// todo}?可以试试这个快捷键。

  • Mac:cmd + alt + t
  • Win/Linux:ctrl + alt + t

可以使用上面的拓展选择选择你需要的代码块,然后使用这个功能Surround With;如果你什么都不选择的话,那么默认选择的是光标所在行。

Unwrap/Remove

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第18张图片

Unwrap

这个功能跟上面提到的是一对,有了Surround With自然就有Unsurround With;使用情况没有上面那个那么多,但是好歹一对,一起介绍吧。

高亮某东西

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第19张图片

highlight something

有时候看代码的时候,看到某个变量想知道哪里使用了它;你还在用肉眼查找吗?或者你杀鸡用牛刀Find Usgae?其实你的需求就是把这个变量全部给我打个标签,我想直观的知道它在哪。

  • Mac:cmd + shift + F7
  • Win/Linux:ctrl + shift + F7

这个键功能远不止这个!

  1. 如果你高亮return或者throw,那么会把这个方法所有的返回点高亮出来!
  2. 高亮某个类的extends或者implements会把这个类Override的方法高亮出来
  3. 高亮import会把使用的地方显示出来

如果不想要高亮了,按下Esc就行。

显示方法调用树

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第20张图片

方法调用树

在看源码的时候,你还是使用alt + F7ctrl + B在各个类之间来回穿梭吗?其实好多时候你就是想知道这个调用结构是怎么样的而已;谁是怎么一步一步滴调用谁的;这个快捷键会给你一个调用树。有了这个大菊观,继续探讨就很容易了。

快捷键:ctrl + alt + h

万能快捷键

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第21张图片

万能快捷键

记得之前提到过一个万能重构键, 有关重构的一切操作都可通过它完成。那么Android Studio这么快捷键,这么多功能,臣妾怎么可能都记住!要是有万能钥匙就好了!That’s it!

使用这个快捷键,你想到什么功能,打开它搜索就可以了;打个比方,我想看看Java的for each循环和普通的for循环底层是不是同一个实现;那么我就需要看虚拟机字节码了;我记得有这个功能但是不知道快捷键是啥;OK,Cmd + shift + A,输入bytecode:

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第22张图片

PS:(我用的Intellij IDEA,Android Studio没有集成bytecode功能,可能搜索不到)




写代码不可避免有Bug,通常情况下除了日志最直接的调试手段就是debug;那么你的调试技术停留在哪一阶段呢?仅仅是下个断点单步执行吗?或者你知道Evaluate Expression, 知道条件断点;可是你听说过日志断点吗,Method Breakpoint,Exception Breakpoint呢?还有高大上的Field Watchpoint?

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第23张图片

几种不同的断点

你有关注过Android Studio旁边断点的区别吗?比如上图三个断点有什么不同?且听我一一道来。

调试基础

一般来说我们有两种办法调试一个debuggable的apk;其一是下好断点,然后用debug模式编译安装这个app;其二是attach process,在Android Studio里面就是这么一个对话框:

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第24张图片

Attach Process

第二种方法比较常用,我们可以在启动apk之后,直接下断点,然后attach process到制定进程,条件触发之后就可以直接进入调试模式。

其他的一些单步执行,step into,step out,force step into等就不提了;基本的跟踪手段。

还是提一下,下断点最简单的办法,是在代码编辑器的左侧,行号右边鼠标点击一下即可。

Evaluate Expression

这个功能非常实用,可以在断点处直接进入一个求值环境,在这里你可以执行任何你感兴趣的表达式;如下图:

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第25张图片

Evaluate Expression

比如在断点处有一个对象object,如果你要查看它的某个属性很简单,在Debug窗口就能看到,但是如果你想要执行它的某个方法看看结果是什么呢?借助这个可以实现。当然它的功能远不止这么多,相当于直接进入了一个REPL环境,非常实用。忘了说了,快捷键Alt + F8:P

条件断点

假设你的断点在一个列表的循环里面,可是你只对这个列表的某一个元素感兴趣,只想在遇到这个元素的时候才断下来;你是一直人肉F9直到满足条件吗?条件断点就是满足这种需求的,顾名思义,在特定条件下的断点。使用起来也非常简单,在你的断点上鼠标右键会出现一个小窗口,写上条件即可。

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第26张图片

条件断点

日志断点

很多时候我们调试的时候更多的是打印日志定位异常代码,缩小范围之后再使用断点解决问题;所以经常做的事情就是在代码里面添加日志信息,输出函数参数,返回信息,输出我们感兴趣的变量信息等。

但是这么做一个问题就是,我们添加了日志代码需要重新编译;在没有Instant Run之前的黑暗时代这么做是非常痛苦的,每次编译少则几十秒,多则几分钟;这样无意义的等待简直就是折磨;其实,除了热部署工具,我们还可以使用日志断点解决这个问题。

首先我们在想要输出信息的地方下一个断点;然后右键这个断点,在出现的设置框里面把这个断点的suspend属性设置为False,这样虽然叫做“断点”,但是并不会真正断下来;然后,我们在log message里面填上我们想要输出的日志信息。如下图(注意标红位置):

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第27张图片

日志断点

这样,每次代码执行到这个断点的位置,这个可爱的断点并不会使我们的程序停下来,而是输出我们告诉它的日志信息,然后继续执行;非常方便。

方法断点

传统的调试方式是以行为单位的,所谓单步调试;但是很多时候我们关心的是某个函数的参数,返回值;(回想一下我们使用日志的时候打印的最多的信息难道不是函数的参数和返回值吗?)使用方法断点,我们可以在函数级别进行调试;如果经常跳进跳出函数或者只对某个函数的参数感兴趣,这种类型的断点非常实用。具体使用方法有两种方式;最简单的是在你感兴趣的方法头那一行打上断点,这时候你会发现断点图标有点不一样,这就是方法断点了,如下图:

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第28张图片

方法断点

另外一种方式是通过断点设置窗口, 后面介绍。

异常断点

在有些情况下,我们只对某些特定的异常感兴趣,或者我们只对异常感兴趣;我们希望只要程序发生异常程序就能断下来;这好像保存现场一样,只要发生命案了(异常),第一时间保存现场,这样什么指纹之类的线索就会清晰很多,坏蛋就算想逃也是插翅难飞啊。

Android Studio给了我们这个能力!那就是异常断点!可以在特定异常发生的时候,直接让整个程序断下来;如果你对所有异常感兴趣,直接Throwable即可。

具体做法是,进入Run -> View BreakPoints或者使用快捷键打开断点设置窗口;如下图:

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第29张图片

断点设置窗口

点击左上角的 ➕ ,会出现一个选择框;选择Exception Breakpoint;然后会出现一个对话框,选择你感兴趣的异常:

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第30张图片

异常断点

Field WatchPoint

在上面我们添加异常断点的时候,点击加号的时候,有四个选项;第一个就是我们前面所说的第二种方法断点的添加方式,第三个是异常断点,那么第二个Field WatchPoint是干什么的呢?

有没有这样一种场景:你发现某个值莫名其妙滴不知道什么时候被谁给修改了,罪魁祸首是谁?Java虽然是值传递,但是引用也可以是值;对象全部存放在堆上面,而堆是被所有线程共享的,因此在非常复杂的场景下,你根本不知道这些共享变量被谁修改了,这样非常危险;在多线程环境下,不变性是一个很重要的特性,我们看到高并发的语言诸如Erlang,Scala对于这种不变性都有着某种程度的支持。

好吧,扯远了;那么我们怎么揪出这个修改我们值的捣蛋鬼呢?那就是这个Field WatchPoint的功能了;使用它我们可以在某个Field被访问或者修改的时候让程序断下来;完美解决这个问题。

下断点的方式和方法断点类似,也有两种;第一种是直接在某个字段的声明处下断点,这时候断点图标会改变,如下图:

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第31张图片

Field WatchPoint

右键这个断点我们可以进行一些设置,比如默认是被修改的时候断下来,你也可以改为每次访问这个字段就断下来。

另外一种方式是Run -> View BreakPoint打开设置,与异常断点类似。

远不止这么多

上面介绍了这么多给力的功能,其实还有很多细节;打开断点设置窗口(Run -> View Breakpoint`):

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第32张图片


android-butterknife-zelezny

android-butterknife-zelezny 是根据butterknife定制的一款插件,能够方便快速初始化,对于我来说是开发必备,本人也对此插件进行了一些优化,个人感觉用起来更爽 ,博客地址:ButterknifePlugin

注意:需要先导入butterknife包才能使用

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第33张图片

Gsonformat

可根据json数据快速生成java实体类


简单实体类
复杂实体类

Android Postfix Completion

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第34张图片

AndroidAccessors


Lifecycle Sorter

可以根据Activity或者fragment的生命周期对其生命周期方法位置进行先后排序,快捷键Ctrl + alt + K


Ctrl+alt+K

JsonOnlineViewer


CodeGlance


看右边

findBugs-IDEA

顾名思义,就是帮你一起找bug的,当然Android Studio也提供了代码审查的功能(Analyze-Inspect Code...)

Android Studio Tips-倍数提高工作效率的Android Studio奇技_第35张图片

ADB WIFI

使用wifi无线调试你的app,无需root权限

Android wifi无线调试App新玩法ADB WIFI

ps:第一张图是作者自己改编插件截图,下载地址Butterknife-Plugin,以上所有插件都可在android Studio plugin 仓库中找到

转载自:http://www.jianshu.com/p/6f5f818afe4b?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

Links

  1. Android Studio Tips Of the Day - Roundup #1
  2. Android Studio Tips Of the Day - Roundup #2
  3. Android Studio Tips Of the Day - Roundup #3
  4. Android Studio Tips Of the Day - Roundup #4
  5. Android Studio Tips Of the Day - Roundup #5
  6. Android Studio Tips Of the Day - Roundup #6

转载自:


倍数提高工作效率的Android Studio奇技

更多相关文章

  1. android中之断点续传
  2. Android 文件实现断点上传
  3. Android大数据、断点续传、耗时下载之DownloadManager开发简介(1
  4. RatingBar 显示正常版本----断点记录
  5. Android 网络多线程断点下载
  6. Android 判断点是否在Path中(含不规则形状的Path)
  7. android4.0自定义标题报错 -----断点记录
  8. android断点下载器案例

随机推荐

  1. 关于事件研究法的50篇精选paper专辑! 助
  2. 基于知识图谱的问答在美团智能交互场景中
  3. Hadoop or TDengine,如何做物联网大数据平
  4. 基于机器阅读理解(MRC)的信息抽取方法
  5. 芝加哥诺奖Heckman开撕哈佛新星Chetty,
  6. linux下逻辑卷的创建和管理
  7. 视频 | 搜索引擎中的 web 数据挖掘
  8. 前沿: nature刊掀起DAG热, 不掌握就遭淘
  9. 诺奖夫妇的中国学生, “DID小公主”的成
  10. 男神毛咕噜最新Top5大作, 另外, 有序因变