2014年2月7日 星期五

Build the jar librarys in Android Studio

從 eclipse 移過來android studio了 , android studio 真的是蠻方便的因為很客製化,但是總要付出一些代價,例如沒有export出library的選項,得要自行建立build.gradle 以及編譯他自行產出。

首先要在你的Project主目錄新增build.gradle 以及local.properties


local.properties:
sdk.dir=/home/jackabk/android-studio/sdk


若是沒有建立local.properties則在build.gradle中將會找不到sdk的目錄。

build.gradle :


buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}
apply plugin: 'android-library'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"
    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 19
    }
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            res.srcDirs = ['res']

            java {
                srcDir 'src/com/jackabk/views/'
            }
            resources {
                srcDir 'src/../lib'
            }
        }
    }

    task clearJar(type: Delete) {
        delete 'build/libs/YourProjectName.jar'
    }

    task makeJar(type: Copy) {
        from('build/bundles/release/')
        into('build/libs/')
        include('classes.jar')
        rename ('classes.jar', 'YourProjectName.jar')
    }
    makeJar.dependsOn(clearJar, build)
}

dependencies {
 compile 'com.android.support:appcompat-v7:+'
}


上面我標紅字的地方,就是你要修改的地方,一個是你的java source code的目錄,一個是你要產生出的jar file name。

然後可以直接在Android studioTerminal上進入此Project目錄並輸入:
$ ./gradlew clearjar

 ./gradlew clearjar
then

 ./gradlew makejar



Reference:

2014年2月5日 星期三

Android of the MotionEvent Studying!

Android 事件當中有蠻多個input device event, 其中有一個MotionEvent,
位於Android SDK 中的  android.view.MotionEvent,
在底下範例將會Capture以下事件:
滑鼠按下、滑鼠彈起、滑鼠移動、觸碰按下、觸碰彈起、手指滑動、滾輪滑動

基本上用到底下這兩個事件就很足夠:

  • onTouchEvent()
  • onGenericMotionEvent()

兩個都包在MotionEvent裡面, 但兩個差別在於, 一個事件是針對使用者的觸碰功能, 另外一個則是針對大多數的裝置(e.g. mouse, joystick..),  所以針對你的應用看適合那一個,
不過要特別注意的是優先序的問題, 其實兩個都有共同的觸發事件,
例如你點螢幕一下, 跟滑鼠點左鍵一下, 其實都會進入到兩個事件, 所以在處理上來講要注意。

底下列出 分別 capture TouchEvent and MouseEvent (請自行建立一個TextView來測試):

onTouchEvent:


@Override
    public boolean onTouchEvent(MotionEvent event) {
        int index = event.getActionIndex();
        int action = event.getActionMasked();
        int pointerId = event.getPointerId(index);

        switch(action) {
            case MotionEvent.ACTION_DOWN:
                mTestMouseEventTextView.setText("CLICK_DOWN");
                break;
            case MotionEvent.ACTION_MOVE:
                mTestMouseEventTextView.setText("CLICK_DOWN_MOVE");
                break;
            case MotionEvent.ACTION_UP:
                mTestMouseEventTextView.setText("CLICK_UP");
                break;
            case MotionEvent.ACTION_CANCEL:
                mTestMouseEventTextView.setText("CANCEL");
                break;
            default:
                return super.onTouchEvent(event);
        }
  return true;
    }

MouseEvent:


    @Override
    public boolean onGenericMotionEvent(MotionEvent event) {
        if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_HOVER_MOVE:
                    mTestMouseEventTextView.setText(String.valueOf(event.getX()) + "\n" + String.valueOf(event.getY()));
                    return true;
                case MotionEvent.ACTION_SCROLL:
                    mTestMouseEventTextView.setText("SCROLL");
                    return true;
            }
        }
        return super.onGenericMotionEvent(event);
    }


在上述中,以滑鼠事件來說, 如果你只是純粹移動, 並沒有點擊, 則會進入"HOVER_MOVE"事件,
因此我在裡面加了一行觀看目前的 x and y position。

其實還有其他更多的應用,都在官方MotionEvent原始檔裡面,註解寫的非常清楚,可以研究看看。


另外也可以自行模擬出滑鼠與鍵盤事件(i.e. 軟體自動執行某個按鍵或者是滑鼠移至指定座標), 使用Instrumentation()類別,

但是悲劇的是,Instrumentation類別裡面的IWindowManager在 Java 1.6中已拿掉,
網路上雖然有蠻多解決方法,但是我試了蠻多還是不成功,不過只要能夠將IWindowManager.aidl這個類別給找回來放置自己的Project中應該就可以了,改天再來試下。

  • Reference:

Handling single and multi touch on Android- Tutorial
Android Touch and Multi-touch Event Handling
Android自動化測試初探(四) : 類比鍵盤滑鼠事件(Socket+Instrumentation實現)
android自动化测试中实现长按并拖动 
[转]Android开发中隐藏类的使用
[Android 開發] 如何在 View 中監聽滑鼠滾動事件?
Mouse move on two views, how to let both of them handle the `ACTION_MOVE` event
Tracking Movement
 


2014年2月2日 星期日

const修飾字的各種情況解釋


  • 首先記住,下面兩種情況是一樣的,都是修飾x是不能被改變的,沒問題。
const TYPE x         
TYPE const x  

判斷方式 ,
1. 先將其TYPE 與 變數分離,若星號(*) 右邊有變數則依賴此變數。
          2. 再將const畫修飾線至TYPE,搞定!!




  • 以下為各種常見的配合,請搭配上述方法判斷:
  1. char* const p;   /*指標本身為不可更改*
  2. const char *p; /*指標所指的內容為不可更改*/
  3. char const *p; /*指標所指的內容為不可更改*/
  4. const int *fun(); /*函數所返回的指標內容為不可更改*/
  5. int* const fun();  /*函數所返回的指標本身為不可更改*

2014年1月26日 星期日

Build beagleboard-xM of linux kernel and driver modules by 2.6.32 version


  • Build BB-xm's Linux Kernel by 2.6.32:
  • 日後都採用這個repositories , 穩定版本 , 裡面還有其他branch是不同的MCU!!

  1. $export ARCH=arm CROSS_COMPILE=arm-angstrom-linux-gnueabi-
  1. $make distclean
  1. $make  omap3_beagle_defconfig #(on the  arch/arm/configs )
  1. $make memuconfig
  1. $make uImage
  1. $make modules # if build the modules

Angstrom Cross Compiler ToolChain 新載點

網路上所有的Angstrom cross compiler toolchain 載點幾乎全都掛點了,
因此讓我緊張一下 , 好加在在我強大的Google Search 下 , 終於給我找到嚕~
-----------------------------------------------------------------------------------------------------------

Here

裡面還有很多其他版本的 ToolChain  ,  64bit(x86_64)  , 32bit(i686) .