Set up javadocs and source for 3rd-party libs

01 October 2014


正常的一個3rd-party lib應該會有3個jar,以greenDao為例,
    1. greendao-1.3.7.jar
    2. greendao-1.3.7-javadoc.jar
    3. greendao-1.3.7-sources.jar

一般而言,其實只要在libs資料夾放第一個,我們就可以正常使用greenDao了,
但是你就會看不到任何的document,大概會看到下面的圖示!
但就算你把這3個jar通通放進去libs資料夾,你也看不到任何的document.
原因是因為你要有一個greendao-1.3.7.jar.properties檔案去config路徑.

我的習慣會在libs資料夾底下,在建立兩個資料夾,分別為
     1. libs/docs
     2. libs/src
然後把對應的jar放在裡面,
所以我的greendao-1.3.7.jar.properties就會跟下面一樣,
src=src/greendao-1.3.7-sources.jar                                                                             
doc=docs/greendao-1.3.7-javadoc.jar

最後再把project close,然後再open起來,
應該就會看到document了!

read more »


Android ORM lib: greeDao

24 September 2014

ORM應該不用多做解釋了,
而Android自己本身並沒有ORM的任何lib可用,
但有很多熱心的人做了third-party lib,像是OrmLitegreenDao
本篇要講的是greenDao,
為什麼我使用greenDao呢?
其實網路上不少人在做OrmLite和greenDao的benchmark
greenDao的performance真是一片倒,
也因此我選擇了greenDao,
不過說實在的,greenDao一開始的前置作業真是有點麻煩!
所以特地寫一篇來記錄!


1. Clone the repository

先把greenDao的repository clone下來,
git clone https://github.com/greenrobot/greenDAO.git


2. Download jar

這就是我說的,前置作業很麻煩!
有3個必要的jar檔,竟然沒有在repository中!
要自行去下載!不過用gradle和marven就不用自行去下載,
anyway我用的是eclipse,所以得去下載!
    1. freemaker.jar
    2. greendao-generator-1.3.0
    3. greendao-1.3.7.jar
前面兩個jar是為了build出dao而用的,
而後面第三個jar給我們app使用的!
在開始之前,先說明一下整體流程,
大致上分為兩個步驟,
    1. 產生 DAO files
    2. 把DAO files 加到自己的android project中


3. Generate DAO files

還記得第一步驟clone下來的repository嗎?
repository中有很多份中有很多個project,
我們只會用到DaoExampleGenerator,
首先先開啟你的eclipse,
點選【File】->【Import】->【General】->【Existing Projects into Workspace】->選擇【DaoExampleGenerator】project
import進來以後應該會很多error,
因為少了2個jar檔,就把【freemaker.jar】和【greendao-generator-1.3.0】import進來吧!

接著打開ExampleDaoGenerator這個class,
這隻java會幫你generate出4個files,
    1. DaoMaster
    2. DaoSession
    3. Model
    4. ModelDao
DAO就是用來負責db的一切操作, create table, insert, delete, query...etc.
model就單純是一個object而已!
這四個files都要加到我們的android project之中,

接著來說明一下ExampleDaoGenerator裡面在做什麼,(我把原本的code改成我的sample了)
public static void main(String[] args) throws Exception {
        // 第一個參數是db的版本,第二個是package名稱
        Schema schema = new Schema(1, "net.kenyang.dao");

        addNote(schema);

        // 產生上述說明的files
        new DaoGenerator().generateAll(schema, "../");
}

private static void addNote(Schema schema) {
        // 這裡可以想像就是增加一個table,有三個欄位,且都是not null
        Entity note = schema.addEntity("Note");
        note.addIdProperty();
        note.addStringProperty("title").notNull();
        note.addDateProperty("date").notNull();
        note.addIntProperty("category").notNull();

}


接著只要按下run以後,這些files就會被產生出來!
接著就把這些files搬移到你的android project當中,
請注意!!由於我們上面的schema是"net.kenyang.dao",
那麼你的android project中也要有這個package,並且把這些files放置在該package當中!


4. Insert, select, delete

完成上面的前置作業以後,在開始之前,
請記得把第二步驟下載的greendao-1.3.7.jar加到android project中,
接著就可以開始使用了!

insert
DevOpenHelper helper = new DevOpenHelper(this, "expense", null);
DaoMaster daoMaster = new DaoMaster(helper.getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();

NoteDao noteDao = session.getNoteDao();
Note note = new Note(null, "hello", new Date(), 0);
noteDao.insert(note);

select
QueryBuilder<Note> query = noteDao.queryBuilder();
// 查詢如果日期小於今天,並且照日期排序
query.where(Properties.Date.le(calendar.getTime())).orderDesc(Properties.Date);
for (Note n : query.list()) {
Log.e("ken", n.getTitle());
}

update
public void fnUpdate(long id) {
        Note note = noteDao.load(id);
        note.setTitle("change title");
        noteDao.update(note);
}

delete
public void fnDelete(long id) {
        noteDao.deleteByKey(id);
}


比原本的SQLiteOpenHelper好用太多了啊!















read more »


How to build your own debian package?

04 September 2014

其實不久前有寫一篇講怎麼build deb package
不過那篇的code source並不是來自於自己的source,
那麼假設你今天自己有一個web,你想把這web打包成一個deb供人安裝,那該怎麼做呢?
這篇主要就是講怎麼create一個自己的deb package.



1. Install necessary package

sudo apt-get install dh-make
dh-make是用來準備debian package所需要的files,
等等會用來gen template files.


2. Prepare environment

這裡先create一個folder,名稱為www,
www底下也要create一些web所需的資料夾和檔案,像是images, css ,js...etc
www的目錄結構大概就長這樣,

www
├── css
│   └── main.css
├── images
│   └── a.png
└── static
└── index.html



我們要把folder底下的東西都打包進去debian package,
並且讓其他人在安裝這個debian package時,可以安裝到我們所指定的path底下!


3. Generate template files

在這步要用前面安裝的dh_make來generate出debian package所需要的template files,
在generate之前,先設定一個環境變數,
這環境變數是用來記錄這個debian package的作者是誰
export DEBFULLNAME="Ken Yang"

dh_make --single --packagename ken-sdk_0.1 --native -e xxxx@gmail.com
--packagename要注意一下,
--packagename分為兩個部分,
前面的部分ken-sdk是package name,
package name只能用-來分隔,不能用底線!
而後面的_0.1是version number,
--natvie,意思是這個debian不是從一個既有的tarball gen出來的!

generate完成以後,你會發現在www folder底下多了一個debian folder,
這debian folder裡面是放一些build debian package所需要的template files,
而既然是template files,那麼就有一些不需要的file或者需要被修改的file,
首先先刪除不需要的file吧!
sudo rm debian/*.ex debian/*.EX

接著就來修改這個template,
首先要先改control這file,
vim debian/control
打開以後,會看到很多information,
你比較需要改的大概就只有Depends (dependency),和Description了!
改完儲存以後即可!

接下來要改copyright,
vim debian/copyright
打開以後,大概就只有年份和作者名稱要改而已!

剩下其他的file,像是README, docs就看你要不要改了,
記得rules千萬別改!rules是build package的起頭!


4. Build debian package

在完成template的修改,準備開始build之前,
我們還有最後一個步驟,就是要指定哪些files or folder是你要放進去這個debian package的!
而就是靠一個檔案去記錄!
這個檔案名稱很重要,要跟你前面的package name一模一樣,
我們前面的package name是ken-sdk,
所以這個file要叫做ken-sdk.install,
裡面的格式就像下面一樣,
images/* /opt/www/image
css/* /opt/www/css
js/* /opt/www/js
第一格參數:現在www folder底下路徑的檔案
第二格參數:將來這deb package被安裝時,這些files要被安裝到哪裡
儲存以後,就可以開始build,指令如下:
dpkg-buildpackage -rfakeroot -b
-rfakeroot:使用root的權限
-b:單純只是binary,不要去build source


5. Verify

完成以後,
debian package會放在folder的上層目錄,
應該會有一個ken-sdk_0.1_amd64.deb,
有一個快速verify你要的files有沒有被包進去,
lesspipe ken-sdk_0.1_amd64.deb

當然你也可以安裝起來看看,
sudo dpkg --install ../ken-sdk_0.1_amd64.deb

接著就去看剛剛指定的folder(/opt/www),是否有我們原本的檔案!


6. Advance: Pre-Install or Post-Install

如果你想要在這package完成安裝或者開始安裝之前,做一些前置作業,
那麼就可以靠preinst和postinst這兩個檔案,
preinst就是安裝之前,
postinst就是安裝完成之後,
相反地,如果你想要在這package被remove時,也做一些操作,
那麼就要有prerm和postrm這兩個檔案!


7. Advance: Update pacakge

如果你這package想要更新,
變成0.2版本,你可以直接編輯change log,但有點麻煩!
可以透過指令快速達成!
dch -v 0.2 "Update package."

之後一樣直接dpkg-buildpackage -rfakeroot -b就可以了!





read more »