標籤雲

Android (59) ActionScript (52) PHP (14) JavaScript (11) 設計模式 (10) CSS與Html (8) Flex (7) Material Design (6) frameworks (5) 工具 (5) 串流影音 (4) 通用 (4) DB (3) FlashRemoting (3) Java (3) SQL (3) Mac 操作 (2) OpenGL ES (2) PureMVC (2) React Native (2) jQuery (2) AOSP (1) Gradle (1) XML (1) 軟體設定 (1)

搜尋此網誌

顯示具有 工具 標籤的文章。 顯示所有文章
顯示具有 工具 標籤的文章。 顯示所有文章

2016/05/16

在 Android Studio 2.1 開啟對 Lambda expressions 的支援

Android N 與 Android Studio 2.1 引進對 Java 8 語言的部分支援
像是:
Default and static interface methods
Repeatable annotations
Lambda expressionsMethod References (這兩項可向下支援到 API level 23 以下)
(其他支援的 Java 8 API 請參考文末連結)

而要使用這些支援必須認識一下 Jack

Jack (Java Android Compiler Kit) 是 Android 新的 toolchain
用來把 java code 編譯成 Android dex bytecode
Jack 使用 Java 1.7 並移植了一些新功能
不但是 Open source,還縮短編譯時間
而這個 toolchain 取代了之前的 javac, ProGuard, dx 等工具
傳統 javac 工具鏈: javac (.java --> .class) --> dx (.class --> .dex)
新的 Jack 工具鏈: Jack (.java --> .jack --> .dex)

Jack 是 Android M 的 default build toolchain
所以不用下任何特殊的 command 就可以使用

順便認識認識 Jack Intermediate Library Linker (Jill)
它負責的是把 jar 檔轉換成新的 lib 格式 (.jack)

在 build.gradle (app) 使用 Jack 的方式
android {
    ...(省略)

    defaultConfig {
        ...(省略)

        jackOptions{
            enabled true
        }
    }
    compileOptions {
        targetCompatibility 1.8
        sourceCompatibility 1.8
    }
    ...(省略)
}
完成以上設定後就可以在專案內使用 lambda 了

同場加映:Lambda 表達式簡介

匿名類別 Anonymous Classes 常被使用於作為一個參數傳遞到 method 裡
但匿名類別(特別是只有一個方法的匿名類別) 寫起來常感覺有些繁瑣
而 Lambda Expressions 對於簡化只有單一方法的類別就可以發揮優點

Lambda 表達式語法:
* 逗號分隔的的參數
* 箭頭標記( -> )
* 表達式主體
- 若使用單行表達式則回傳結果值,或是直接使用 return,不過 return statement 不是表達式,如果 method 不是回傳 void 則 statement 需使用大括號( { } )

例如如果我們有一個 printPersons 方法,傳入 List<Person> 及 CheckPerson 介面的實體(其中有 test 方法)
可以輸出通過條件的 Person 訊息
public static void printPersons(
    List<Person> roster, CheckPerson tester) {
    for (Person p : roster) {
        if (tester.test(p)) {
            p.printPerson();
        }
    }
}
實際呼叫時 code 是像這樣:
printPersons(
    roster,
    new CheckPerson() {
        public boolean test(Person p) {
            return p.getGender() == Person.Sex.MALE && p.getAge() >= 18 && p.getAge() <= 25;
        }
    }
);
改寫成 lambda 之後:
printPersons(
    roster,
    (Person p) -> p.getGender() == Person.Sex.MALE && p.getAge() >= 18 && p.getAge() <= 25
);

相關資料:
android developers - Java 8 Language Features
Jack (Java Android Compiler Kit)

2016/01/19

Android Studio 的 dependencies setting 與 library module 輸出設定

Android Studio 的 dependencies setting 約有下面幾種類型:

1. 將某目錄下所有符合條件的檔案加入
下例即是將 libs 下的所有 .jar 檔加入
compile fileTree(include: ['*.jar'], dir: 'libs')

2. 從 marven central 中加入
寫法一般是 packageName:projectName:Version
若使用本機的 aar 檔記得加 @aar
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.journeyapps:zxing-android-embedded:3.1.0@aar'

3. 加入某個匯入的 library module
寫法是 compile(project(':projectName'))
compile(project(':zxing-android-embedded')) { transitive = true }

4. 加入 aar 檔
下例是將 libs 下的特定 aar 檔案加入
dependencies {
    compile(name: 'nicelibrary-v1.0.3', ext: 'aar')
    ...
}
repositories {
    flatDir {
        dirs 'libs'
    }
    mavenCentral()
}

5. 加入某路徑下的 jar 檔
compile files('yyyy/xxxxxx.jar')

如果設定成功
在專案路徑下的 build/intermediates/

而在 gradle 中的輸出設定
正常狀況是輸出為 apk
寫法是這樣
apply plugin: 'com.android.application'

輸出為 aar 的話 (即作為 library module 的 project)
apply plugin: 'com.android.library'

輸出方式為:
1. 叫出 android studio 的 Gradle 面板(一般是在右側)
2. 找到要輸出的 Module 在 build 下面找到 assembleRelease
3. 按右鍵選擇 "Run"
若成功輸出
路徑為 build\outputs\aar
若 proguard 失敗就檢查 proguard 設定

相關資料: Android Studio 打包及引用 aar

2009/06/11

Flash IDE 匯出 SWC 供專案使用

現在 Edward 都是用 Flash Develop 來寫 Actionscript 的 code 了
不過一些牽涉到視覺的元件還是必須透過 Flash IDE 來做發佈
且命名上面也是一個問題
這樣實在是很鳥
雖然知道這要用匯出 SWC 的方式來解決
可是一直沒有用過
剛好今天逛網路看到了關於這方面的分享
趕快記錄下來

其實方法很簡單:
1. 在 Flash IDE 裡開一個檔案, 把要匯出的元件作好放在裡面
2. 元件設定好類別連結(建議可用 package 做個分類)
3. 發布設定中要勾選 "匯出SWC", 並把產生的 SWC 檔放在專案路徑下(建議是 libs 資料夾)
4. 進 Flash Develop 將該 SWC 右鍵點選 "Add To Library", 就可以 import 在 SWC 裡面的類別了
(或是在專案屬性的 SWC Libraries 裡填上 SWC 檔名及路徑)

Flex Builder 的作法也差不多
在Project -> Properties-> ActionScript Build Path -> Library Path -> Add SWC
輸入 SWC 檔名及路徑即可( libs 資料夾內的會自己抓, 不用另外設)

不過 Flex Builder 不可以直接在 MXML 加進 SWC 裡的物件
這要怎麼辦呢!!??
在 CS3 有一個 Flex Component Kit for Flash CS3 的 Extension
安裝後在"命令"選單裡會多出 Make Flex Component 選項
點選後再匯出就可以了

2009/03/17

Flex 快速鍵

Flex 的快速鍵...
跟 Flash Develop 的快速鍵
在共通性上並不好

不過 Flex 是 Eclipse Base 的 Tool
應該是比較多使用者在用吧....

Ctrl + Shift + T //檢視專案中的類別原始碼(這個太讚了!!我喜歡!)
Ctrl + O //檢視檔案 Outline
Alt + / //程式碼屬性提示
Ctrl + Shift + Space //程式碼參數提示
Ctrl + Alt + R //Rename功能(自動更新專案所有檔案中被更名的成員)
Ctrl + Alt + ↑ //複製游標所在行並貼上在新行
Ctrl + Alt + ↓ //複製游標所在行
Ctrl + D //刪除游標所在行
Ctrl + Shift + p //尋找成對大括弧

Alt + ↑ //游標所在行向上移動
Alt + ↓ //游標所在行向下移動
Ctrl + K //尋找(游標反白的字串)
F3 //尋找宣告(如在call function的地方按, 可以跳到該function)
Ctrl + / //註解單行
Ctrl + Shift + c //註解區塊

Ctrl + M //編輯視窗放到最大
Alt + ← //切換到左頁籤檔案
Alt + → //切換到右頁籤檔案

F11 //Debug
Ctrl + F11 //Run
Ctrl + B //Build All Projects

2009/03/02

FlashDevelop 快速鍵

最近接觸到了 FlashDevelop 這個軟體
算是很不錯的 ActionScript 編輯器(重點是免費!!)

以下列出一些快捷鍵做個備忘吧

Ctrl + Shift + 1 //自動匯入類別, 產生 Event Handler, Method override, 產生 Getter/setter, 自動宣告變數(或本地變數轉成類別變數), 實做介面方法...等等
Ctrl + B //插入 Snippet
Ctrl + Shift + K //插入色碼
-------------------------------------------
Ctrl + Shift + Space //出現程式碼提示
Ctrl + Alt + Space //類別提示
F1 //(提示區塊有 ... 時)展開訊息
F4 //尋找宣告(如在call function的地方按, 可以跳到該function)
Shift + F4 //從宣告返回(按了F4後回去用的)
Ctrl + D //游標所在行複製並貼上新行

Ctrl + Q //單行註解
Ctrl + Shift + Q //取消單行註解

Ctrl + Shift + F //程式碼收合
Ctrl + Shift + A //程式碼全部收合
Ctrl + Shift + E //程式碼全部展開