Skip to content
Ider

沉淀我所学习,累积我所见闻,分享我所体验

Primary Navigation Menu
Menu
  • Home
  • About Ider
    • Who Ider?
    • Why Ider?
    • How Ider?
    • Where Ider?
    • What Ider?

Android (Page 2)

2017-06-07
07 June
On June 7, 2017
In Article Collection(聚宝收藏), Language Tips(语言初试)

Intellij的PSI Viewer工具

前阵子研究了一下怎么创建自定义的Intellij的Plugin和Android的Lint Rule,惊喜地发现它们有一个共同点就是都用PSI (Program Structure Interface)来呈现代码结构。因此很容易重用部分代码来将某个需求通过Plugin和Lint Rule来实现。

可惜关于PSI的文档十分稀少,所以本来就来讨论Intellij中查看PSI结构的工具来更多得在代码实现中读取和操作PSI对象。

Intellij PSI Viewer

Intellij内置了PSI Viewer,可以从Tools菜单下找到相应的选项来打开窗口,如果当前激活的Intellij窗口是文件编辑窗口还能看到选项直接常看当前文件的PSI结构:

打开PSI Viewer窗口,可以看到如下的视图进行PSI结构查阅,当鼠标指针在文件中移动时,对应的PSI结构也会被加亮来表示它属于哪个类型。这样在代码中就可以知道应该给PsiTreeUtil.getChildrenOfType()传什么参数了,或者在强制转换时应该用什么类型。

Read More →

2017-05-03
03 May
On May 3, 2017
In Knowledge Base(心得笔库), Language Tips(语言初试), Mobile Development(移动开发)

Android编译工具Gradle和Buck使用对比

前面介绍了Gradle和BUCK两个编译工具的基本概念,本篇文章再来说说日常使用情况。本文不涉及配置方面的使用,毕竟大多时候配置工作是不重复的任务,具体操作可参见官方文档。这里主要讲讲日常工作会用到的使用两个工具编译,安装等操作的不同体验。

指令(Command)

指令操作是程序自动话的先决条件,两者都是基于指令来执行编译任务。其主指令分别为./gradlew和buck,然后调用子指令来执行相应的操作。
Read More →

2017-02-27
27 February
On February 27, 2017
In Knowledge Base(心得笔库), Language Tips(语言初试), Mobile Development(移动开发)

Android编译工具Gradle和Buck浅对比

在Twitter工作的那两年,我学习了Gradle编译Android,了解了很多Gradle的配置;在Facebook的一年里我又学习了Buck编译工具,跟Buck的开发人员有过交流。现在市场上主流的Android编译工具还是Google官方推行的Gradle,Github上很多Android开源项目也会带上Gradle文件,只有很少的项目会选用Buck。

本文就来分享一些我对两者的使用体验。不过我对编译工具的使用还停留在当做配置文件的阶段,还没有到达当做开发工具做深入自定义的程度,也没有足够的经验来总结说Gradle和Buck两个编译工具到底哪个比另一个更好,所以只能描述一些比较浅显的表层对比。

语言(Language)

Gradle使用的语言是Groovy。为了能更好的了解Gradle,我曾特尝试学习了Groovy,它算是Java的超集,可以跟Java无缝结合,只不过Groovy加入了诸多丰富的元素来弥补Java的不足。其中一点就是Groovy的闭包形式似乎又结合了JavaScript里的概念,却又不是非常成熟,当年学习的时候没有特别能领悟其中的奥秘就中途放弃了。另一方面,Gradle实际上是Groovy提供的“领域特定语言(Domain-specific language, DSL)”,然后用Groovy的语法解析去执行。然后再读Gradle的文档了解提供的特定API,内容无比繁多。好在Google总结了Android开发需要的内容,平时也只要复制粘贴必要的内容即可。

Buck使用的语言是Python。可以在BUCK文件里书写任何Python指令来执行,比如动态配置源码范围等等。但最长使用的还是对Buck规则做一层包装来进行自定义规则。不过通过跟Buck的开发人员的交流,Buck实际上是用Java开发出来的,在编译时开启了Python环境来编译Buck。

 

对比Groovy和Python,前者几乎没有听到过其他的应用,深入学习不会带来其他好处,后者应用广泛,但是在Android开发上也不会有更多帮助。再者,要使用Gradle和Buck这两个编译工具,也并不需要对相应的两门语言有深入的理解,只要掌握基本使用即可。

模块(Module)

这里的模块是指Intellij的项目模块,是为了更好的组织、测试、重用而创建的独立单元。每个模块都有它的属性:比如主模块是应用程序,此外我们会创建资源模块,Java库模块,Android库模块等等。当开发多个应用程序时,就可以引入部分模块来重用。
Read More →

2016-10-04
04 October
On October 4, 2016
In Knowledge Base(心得笔库), Special Tricks(奇技妙招)

从Terminal截取Android设备的屏幕

做Android开发的时候,经常会需要截取设备的屏幕甚至录制设备屏幕,来让同事知道提交的代码实现的功能,或者让他们知道产品中出现来什么问题。截取Android设备的屏幕有很多方法,比如在Nexus系列同时按下“电源”和“音量调低”按钮来截取,也可以用第三方程序来完成。通过另一部手机来拍照录像也是可行的方案。但是这些方法还需要想办法将文件传输到电脑上,又要多一步麻烦的操作。

Mac电脑上也有一些应用程序可以截屏Android设备,但是我更喜欢用终端指令,令人开心的是Android自带的 adb 已经提供了截取屏幕和录制屏幕的指定:

[codesyntax lang=”bash” lines=”normal”]

$ adb shell screencap /sdcard/screen.png
$ adb shell screenrecord --verbose /sdcard/demo.mp4

[/codesyntax]

不过生成的文件依然保存在设备中,还需要用adb pull指定来转到电脑上

为了让整个过程更加的便捷,我将这些指令包裹在bash方法中,然后一个指令来完成截取和传输的工作。

截取Android设备当前屏幕并保存到执行指令的电脑目录上:

[codesyntax lang=”bash” lines=”normal”]

# capture screen of android device
andrdroidScreenCapture() {
    curTime=`date +%Y-%m-%d-%H-%M-%S`
    tmpeName="$curTime.png"
    [[ -n $1 ]] && fileName=$1 || fileName=$tmpeName
    devicePath="/sdcard/$tmpeName"
    adb shell screencap -p $devicePath
    adb pull $devicePath $fileName
    adb shell rm $devicePath
}

[/codesyntax]

录取Android设备屏幕活动,结束后将视频文件保存到执行指令的电脑目录上:

[codesyntax lang=”bash” lines=”normal”]

export ADB_SHELL_SCREENRECORD_ARGS='--verbose --bit-rate 2000000'
# record screen of android device
androidScreenRecord() {
    echo -e "\033[1m(press Ctrl-C to stop recording)\033[0m"
    curTime=`date +%Y-%m-%d-%H-%M-%S`
    tmpeName="$curTime.mp4"
    [[ -n $1 ]] && fileName=$1 || fileName=$tmpeName
    devicePath="/sdcard/$tmpeName"
    adb shell screenrecord $ADB_SHELL_SCREENRECORD_ARGS $devicePath
    sleep 1 # wait for video encoding finish
    adb pull $devicePath $fileName
    # Don't delete copy in device.
    # adb shell rm $devicePath
    open $fileName
}

[/codesyntax]

较短的指令别名,并通过提供的文件的扩展名来决定是截屏还是录制:

[codesyntax lang=”bash” lines=”normal”]

function asc() {
    if [[ -z $1 ]]; then
        echo "Please provide a filename."
        echo "Provideing .png extension for capturing the device screen, and providing .mp4 for recording the device screen."
        return
    fi

    if [[ $1 == *.png ]]; then
        andrdroidScreenCapture $1
    elif [[ $1 == *.mp4 ]]; then
        androidScreenRecord $1
    else
        echo "Filename with unknow extension, only .png and .mp4 are supported"
    fi
}

[/codesyntax]

完整脚本代码可以在Gist上找到,把它们加入到Mac电脑的~/.bash_profile中,连接上开启了“开发者模式”的Android设备就可以方便截图了。

http://blog.iderzheng.com/wp-content/uploads/2016/10/android-screen-capture-SD.mp4

 

References:
  1. Capture or record android screen, pull file to Mac when it’s completed
  2. ADB Shell Commands | Android Studio
  3. Android Debug Bridge | Android Studio
2016-05-09
09 May
On May 9, 2016
In Article Collection(聚宝收藏), IT Products(数码产品), Knowledge Base(心得笔库)

Android开发中真机和模拟器的体验

做移动开发总是离不开在移动设备上做测试,虽然说Android设备单机可能比iPhone便宜,但是真要各种设备集齐也是不小的开支,再加上要试验不同的Android版本那组合起来又有好多了。所以一般开发者往往只在特定几个设备中做检验。需要测试不同版本也会求助于模拟器(Emulator) 。

Google为Android提供的自带模拟器的效果以前实在惨不忍睹,随着Android Studio 2.0出的模拟器倒是提高了不少,但依然挺糟糕的。
android-avd

大多公司都会购买Genymotion使用,可以创建多种不同版本的模拟器,即使是最新的版本也能很快支持。虽说价格抵上一部真机,却得到好多不同版本和厂商的设备,而且效果优越、功能丰富,真实物超所值。
genymotion

由于某些纠纷,Genymotion默认没有Google Play Services,就无法使用Google的Play Store,Account等等。不过网上也有很多攻略教大家怎将其么安装到Genymotion上,于是都可以在上边打《炉石传说》了。

真机和模拟器各有下边这样那样的缺点:

真实设备 模拟器
  • 价格昂贵
  • 不易携带多个
  • 同一设备不支持多种版本
  • 容易没电
  • 老设备会断货
  • 无SIM卡
  • 无摄像头
  • 不支持推送
  • 多手势不方便
  • 使用习惯不一致

Read More →

2016-01-20
20 January
On January 20, 2016
In Article Collection(聚宝收藏), IT Products(数码产品)

一些实用的在线课程的网站

现在的学习已经不仅仅局限于课堂之上,也不光来自于工作之中,借着在线教育网站(Massive open online course, MOOC)的崛起,越来越多的人通过在线学习了补充自身的知识,提高各个方面的能力。之前分享过《一些视频教程网站推荐》,这里再分享一些非常有用的提供在线课程的网站,可以在上下班路上或者平时休息时播放观看。

Udacity

Udacity

Udacity主要是编程开发技术类的在线课程,而且这些课程的由诸如Google、Facebook这些大公司提供,所以质量也很高。这些视频大部分需要付费才能观看,但也有很多免费又值得学习的内容。我个人在上边获得了很多关于Android开发方面的能力提升。

对于付费用户,网站还会在完成某些课程内容后提供“Nanodegree”的荣誉来证明对某项知识已被掌握。

Udemy

Udemy

Udemy上的视频教程包罗万象,对于不满足于一个领域的知识的人,可以在上边了解其他领域的基础知识,比如房产投资,股票交易。

同样的,网站的大部分课程的需要付费,而且价格还不低,但是一些免费课程也非常的受欢迎。另外很多课程每节视频的长度都较短,所以很容易快速完成一节课程的学习。
Read More →

2015-11-26
26 November
On November 26, 2015
In English Posts(英文写作), Mobile Development(移动开发)

2015 Android Dev Summit Schedule and Videos

ads
Here is the full schedule of Android Dev Summit. If you missed the live stream, you can find the YouTube Play List here. You can find the video link for each session from the title in the following schedule table as well.
The table also contains the speakers of each session, and their Twitter accounts are attached to their names. If you like to know more about Android Development, you can follow them and @AndroidDev.

Day 1

9:05am – 9:45am

Keynote

Dave Burke & Stephanie Saad Cuthbertson

9:45am – 10:30am

Android Application Architecture

Yigit Boyar & Adam Powell

10:30am – 11:00am Coffee Break
11:00am – 11:45am

Respecting User Attention: Notification Best Practices

Chris Wren

Secrets To App & Game Success On Google Play

Brian Quimby & Andreas Preuer

11:45am – 12:30pm

Keep It Secret, Keep It Safe

Chad Brubaker

Android Textual Layout

Raph Levien

12:30pm – 1:30pm Lunch
1:30pm – 2:15pm

RecyclerView Animations And Behind The Scenes

Chet Haase & Yigit Boyar

2:15pm – 3:00pm

Support Library: Guts And Glory

Chris Banes & Adam Powell

3:00pm – 3:30pm Office Hours
3:30pm – 4:15pm

“Mother, May I?” Asking For Permissions

Svet Ganov & Jeff Sharkey

4:15pm – 5:00pm

Framework Fireside Chat

Hosted By Dan Galpin

Read More →

2015-11-25
25 November
On November 25, 2015
In Mobile Development(移动开发)

2015 Android Dev Summit第二天

今天的演讲主要是关于Android开发工具,其中又以Android Studio 2.0作为重点介绍项目。
android-studio
(上图是唯一一张不是来自会场的照片)

9:00演讲正式开始,基本是昨天开场介绍Android Studio 2.0和新的Emulator的加长版,但同时也对Instant Run的原理做了简单的介绍。不管怎样Android Studio 2.0都是很值得期待的,而且Google已经抛弃Eclipse for Android很久了,所以赶紧转到Android Studio吧。
IMG_20151124_090044

之后跟昨天一样也是两个演讲同时进行,一个关于新出的Data Binding。我则去了另一个关于User Identity方面,不过这个演讲只是介绍了怎么用Google Service提供的Google Account来作为登录账号。更多的API的介绍和使用还得自行网上搜索。然后听了关于Android Build System的演讲,不过没有什么Demo的过程。
Read More →

2015-11-24
24 November
On November 24, 2015
In Mobile Development(移动开发)

2015 Android Dev Summit第一天

今年的Google I/O没有抽到票,不能到现场参加。不过11月举行的Android Dev Summit的票是先到先得的方式,所以早早的提交了注册。今天终于有机会当面跟Android系统的设计开发者们进行交流,还能见到来自各个公司的Android工程师,跟他们讨论Android开发中碰到的问题。
ads

演讲一开始就给大家一个惊喜:Android Studio 2.0
android-studio
Read More →

2015-10-08
08 October
On October 8, 2015
In Knowledge Base(心得笔库), Mobile Development(移动开发)

Style在Android中的继承关系

Android的Styles(样式)和Themes(主题)非常类似Web开发里的CSS,方便开发者将页面内容和布局呈现分开。Style和Theme在Android里的定义方式是完全一样的,两者只是概念上的区别:Style作用在单个视图或控件上,而Theme用于Activity或整个应用程序。由于作用范围的不同,Theme也就需要比Style包含更多的定义属性值的项目(item)。不过本文,我将Style和Theme都归为Style来称呼。

Android的Style和Web的CSS相比,有一个缺陷就是只能针对一个对象只能通过android:theme="@style/AppTheme"或style="@style/MyStyle"指定一个值。而CSS则可以通过class属性在DOM元素上定义多个样式来达到组合的效果。不过Style也有CSS没有的功能,那就是继承(Inheritance)。(当然CSS通过LESS和SASS这些工具也获得继承的能力。)
Read More →

Posts pagination

Previous 1 2 3 4 Next
Facebook
Twitter
LinkedIn
RSS
ZhiHu

Recent Posts

  • 三年居家工作感受
  • Pixel Watch智能手表和Pixel 5, 6 Pro 及 7 Pro手机
  • 我拥有过的无线耳机
  • 毕业工作一个月,我差点被开除
  • 我拥有过的移动硬盘
  • ProtoBuf 2.0 method count optimization for android development
  • 面过100场行为面试后

Categories

  • Algorithm Analysis(算法分析)
  • Article Collection(聚宝收藏)
  • Data Structures(数据结构)
  • Design Patterns(设计模式)
  • English Posts(英文写作)
  • Front Interface(界面构想)
  • IT Products(数码产品)
  • Knowledge Base(心得笔库)
  • Language Tips(语言初试)
  • Mathematical Theory(数学理论)
  • Mobile Development(移动开发)
  • Programming Life(程序人生)
  • Reading Notes(阅而后知)
  • Software Engineering(软件工程)
  • Special Tricks(奇技妙招)
  • Tangential Speech(漫话杂谈)

Tags

Aero Android API Bash Binary Search Bitwise Operation Book C/C++ Career Chrome Conference CSS Debug Device DOM Extension Framework Game Gradle Hearthstone HTML Initialization Intellij Interview iOS Java JavaScript jQuery Keyword Language Issues Mac Microsoft Mobile Modifier Objective-C PHP Principle Reference Regular Expression Static String Tools Tutorial UI XML

Blogroll

  • Ahmed's Blog
  • Gert Lombard's Blog
  • Gordon Luk
  • Jack & Allison
  • 开发部落

Archives

Designed using Chromatic. Powered by WordPress.