Archmage's Temple

追求卓越


  • 首页

  • 归档

  • 标签

OSX(ZSH) 一键切换JDK版本的方法

发表于 2016-03-16   |   分类于 技术   |  

背景(Why)

现在经常遇到一些事情需要不同的 JDK 环境. 比如编译 android4.4源码要 JDK6 ,编译 play framework(1.2.7) 需要JDK7(JDK8会报错),这个时候要是能一键切换就能方便很多。下面我就向大家介绍一下OSX下zsh terminal一键切换JDK版本的方法。

如何切换(How)

vi ~/.zshrc

在配置文件底部添加如下配置:

1
2
3
4
5
6
7
8
9
10
#JDK Switch
export JAVA_6_HOME=/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
export JAVA_7_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home
export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home

export JAVA_HOME=$JAVA_8_HOME

alias jdk8='export JAVA_HOME=$JAVA_8_HOME'
alias jdk7='export JAVA_HOME=$JAVA_7_HOME'
alias jdk6='export JAVA_HOME=$JAVA_6_HOME'

然后命令行输入jdk6/jdk7/jdk8 就可以得到相应的版本

运行效果

Switch JDK6

1
2
3
4
5
$ jdk6
$ java -version
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-468-11M4833)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-468, mixed mode)

Switch JDK7

1
2
3
4
5
$ jdk7
$ java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

Switch JDK8

1
2
3
4
5
$ jdk8
$ java -version
java version "1.8.0_73"
Java(TM) SE Runtime Environment (build 1.8.0_73-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode)

切换起来so easy啊, 一颗赛艇😄

Android Studio Tips(OSX)

发表于 2016-02-15   |   分类于 技术   |  

Android Studio Tips(OSX)

使用Android Studio开发已经一年多了,这是Google力推的Android开发工具(而且官方已经放弃Eclipse ADT更新了)。

自从开发Android从eclipse迁移到Android Studio后,为了提高自己的开发效率,奉着“键盘可以替代鼠标”的理念,先是去网上搜罗各种快捷键, 接着又搜罗各种插件来提升开发效率。

其实关于插件和快捷键以及AS的使用技巧,网上有各种详细的教程。这里告诉大家不用都记住,因为常用的就那么几个,下面我就把我自己经常用的,好用的快捷键以及插件分享给大家。
【备注】由于我开发使用的是mac电脑,下面的快捷键都是osx下面的,windows小伙伴忽略

快捷键

展开部分代码块:cmd + "+"
展开全部代码块:cmd + shift + "+"

折叠部分代码块:cmd + "-"
折叠全部代码块:cmd + shift + "-"

提取方法:cmd + option + M
跳转到指定行数: cmd + L
指定行数代码添加try catch/if/while等: cmd + option + T

复写父类方法: ctrl + O
实现接口方法: ctrl + I

调用生成器(getter setter/toString/equals等): cmd + N
查找被使用的地方: option + F7
格式化代码: cmd + option + L
全局搜索: double shift(快速按两下shift键)

打开一个类: cmd + O
打开一个文件: cmd + shift + O

最近打开的文件: cmd + E
最近编辑的文件:cmd + shift + E

跳转到类、变量、方法声明的地方: cmd + B
跳转到父类:cmd + U
重命名变量名或者方法名: shift + F6

阅读全文 »

Android开发中的“要”与“不要”

发表于 2016-02-15   |   分类于 技术   |  

Android开发中的“要”与“不要”

我们在开发Android应用的过程中,不能只满足于实现功能,应该遵循一些准则,使得我们的代码优雅并且便于维护和扩展,我们应该做到如下几“要”和几“不要”

要

  • 使用Gradle以及Gradle推荐的工程结构
  • 把密码以及敏感信息放在gradle.properties中
  • 受限于65k method limit,尽量使用轻量的库
  • 使用第三方库解析JSON数据
  • 使用styles来避免layout xml中重复的属性
  • 使用Genymotion模拟器(此模拟器真的很快)
  • 必须使用Proguard混淆代码

不要

  • 不要自己写Http Client, 使用Volley或者OkHttp库
  • 不要把一个styles.xml写得很大,尽量拆分
  • colors.xml不要写得复杂,只定义一个调色板就ok
  • dimens.xml也不要写得复杂,只定义通用的尺寸
  • 不要把View的层级写得很深

项目结构


Google推荐使用Gradle & Android Studio开发Android项目,新的工程结构是这个样子的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
new-structure
├─ library-foobar
├─ app
│ ├─ libs
│ ├─ src
│ │ ├─ androidTest
│ │ │ └─ java
│ │ │ └─ com/futurice/project
│ │ └─ main
│ │ ├─ java
│ │ │ └─ com/futurice/project
│ │ ├─ res
│ │ └─ AndroidManifest.xml
│ ├─ build.gradle
│ └─ proguard-rules.pro
├─ build.gradle
└─ settings.gradle

Gradle配置


在我们app的builde.gradle文件中,我们需要针对release build定义signingConfigs , 也许我们会这么写:

1
2
3
4
5
6
7
8
signingConfigs {
release {
storeFile file("myapp.keystore")
storePassword "password123"
keyAlias "thekey"
keyPassword "password789"
}
}

这种写法我们是不推荐的,因为密码是敏感信息,我们应该将其放置gradle.properties中,应该这样:

1
2
KEYSTORE_PASSWORD=password123
KEY_PASSWORD=password789

然后我们的build.gradle文件应该这样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
signingConfigs {
release {
try {
storeFile file("myapp.keystore")
storePassword KEYSTORE_PASSWORD
keyAlias "thekey"
keyPassword KEY_PASSWORD
}
catch (ex) {
throw new InvalidUserDataException("You should define KEYSTORE_PASSWORD and KEY_PASSWORD in gradle.properties.")
}
}
}
阅读全文 »

基于Nuwa实现Android自动化HotFix

发表于 2015-12-29   |   分类于 技术   |  

What–什么是HotFix

HotFix是针对某一个具体的系统漏洞或安全问题而发布的专门解决该漏洞或安全问题的小程序,通常称为修补程序

Why–为什么我们要用HotFix

试想这样一个场景:当Android发布App之后,如果突然发现了一个严重bug,而这个bug需要进行紧急修复

这时候我们通常的处理流程是:解决bug、重新打包App、测试、向各个应用市场和渠道换包、提示用户升级、用户下载、覆盖安装。有时候仅仅是为了修改了一行代码,也要付出巨大的成本进行换包和重新发布。用户体验来很是糟糕

Question: 有没有办法不重新发布App,不需要用户重新下载覆盖安装,就可以完成Bug的修复?

答案是Yes,HotFix就是做这个事情的。Android HotFix原理介绍可以参照这里:HotFix

Nuwa(女娲)是一个自动化的工具,基于上述原理将骤自动化了,下面我就介绍一下如何使用

阅读全文 »

基于Travis CI搭建Android持续集成以及自动打包发布流程

发表于 2015-12-23   |   分类于 技术   |  

前言

最近项目进度比较轻松,闲来自己研究一些感兴趣的技术,恰好这两天研究了一下Travic CI, 用于Android持续集成以及自动打包,话不多说,下面大家就跟我一起踏入Travis CI的奇妙旅行

背景

我们在开发Android项目的时候,大致的流程是这样:
image

Question:这些步骤能否简化,能否自动化?
懒是码农的美德,作为资深码农应该善于用工具提高自己的工作效率,能自动化的要自动化。那么今天要讲的Travis CI就能简化我们的工作,上述流程如果使用Travis CI那么工作流程是这样的:
image
Tag提交后,Travis CI会自动编译代码,生成apk文件,并发到Github和相应地其他渠道(fir.im, 蒲公英等),分发完成后,会邮件通知参与测试的人员。如此一来,作为码农,只要安心Coding和打Tag就好了,轻松愉快啊😄,下面我们就来着重介绍Travis

什么是Travis CI

简单来说它是用来做持续集成的工具,可以为你自动构建、测试、打包等等,极大的简化了工作流程。它对Github的支持特别好,链接到你在Github上的项目以后,每当你把测试通过后的代码提交到master去,它会pull你的代码并按照你的要求构建执行

如何安装Travis CI

首先需要安装Ruby, 你可以通过运行ruby -v 检查系统是否安装Ruby:

1
2
$ ruby -v
ruby 2.0.0p645 (2015-04-13 revision 50299) [universal.x86_64-darwin15]

然后运行:

1
$ gem install travis -v 1.8.0 --no-rdoc --no-ri

安装完毕后,检验一下:

1
2
$ travis version
1.8.0
阅读全文 »

Android Data Binding(More Xml, Less Java)

发表于 2015-12-19   |   分类于 技术   |  

背景

Google在2015年的I/O大会上发布了三个重要的支持库:

  • Material Design支持库:Android Support Design
  • 百分比布局支持库:Percent support lib
  • 数据绑定支持库:Data Binding Library

Data Binding有什么作用

  • 是官方支持的MVVM模式框架
  • 可以直接在静态布局XML中绑定数据,无需再findViewById,然后再手动设置数据

    Question:是不是RoboGuice、AndroidAnotations...这样的依赖注入框架会慢慢淡出市场

  • 可以提高解析XML的速度
  • UI与功能解耦

Data Binding的需求与支持

需求

  • Android Studio 1.3.0-beta1 或更高版本
  • Gradle plugin 1.3.0以上

支持

  • Android 2.1(API level 7+)以上
阅读全文 »

Android自动化之多渠道打包

发表于 2015-12-19   |   分类于 技术   |  

概述

每当发新版本的时候,Android客户端会分发到各大市场,比如:豌豆荚,91,小米等。为了统计这些市场的效果(活跃度,下载量等),需要有一种方法唯一标识它们。
每次发版本,产品部都会提供一个渠道列表,Android开发者会根据这些渠道相应地生成渠道包,随着渠道越来越多,客户端如果都是机械手动去打的话,会累死,程序猿都是聪明而懒惰的,客户端打渠道包的方法一直在演进和提高。
从美团技术博客上有一篇介绍自动打包的博文,结合我自己的项目,我就对META-INF自动化打包作一下描述。
我们首先需要用工具(IDE、maven、ant等等)打一个签名包,这个包作为母包,用来打各个渠道包用。这个包我们用解压缩工具打开,发现根目录会有一个META-INF目录,如下图所示
image

阅读全文 »

Android静态布局中tools命名空间的作用

发表于 2015-12-19   |   分类于 技术   |  

If you have ever entered some testing text in a TextView to see how it looks in the previewer, then this is for you.

For any attribute in the xml that has the pattern ‘android:something=”value”‘, you can add a new attribute named tools:something=”value” and it will be picked up by the previewer but ignored in your app. Then you can leave default values that makes sense to visualize the layout without impacting the final build.

Two things that you should check using the tools namespace:

1) Text that will be set at runtime (so that you don’t try to visualize an empty layout)

2) Stuff that is dynamically changed later (e.g. visibility)

To configure the tools namespace, put this in the root tag of your layout (under the android xmlns):

1
xmlns:tools=http://schemas.android.com/tools

image

David.Yu

David.Yu

Google Fans、Android Follower

8 日志
1 分类
6 标签
GitHub Weibo Zhihu
© 2016 David.Yu
由 Hexo 强力驱动
主题 - NexT.Pisces