某個角度上說,kindle很類似android,同樣的Linux內核,同樣的Java用戶層。不過kindle更註重簡單、節能、穩定。Amazon一向認為,功能過多會分散人們閱讀時候的註意力。 Kindle底層的Linux比Android保持了更多的linux相容性,可以使用GTK或者QT編寫程式。Q ...
某個角度上說,kindle很類似android,同樣的Linux內核,同樣的Java用戶層。不過kindle更註重簡單、節能、穩定。Amazon一向認為,功能過多會分散人們閱讀時候的註意力。
Kindle底層的Linux比Android保持了更多的linux相容性,可以使用GTK或者QT編寫程式。QT適合編寫大的、獨占界面性的應用,比如多看就曾經發佈過一個Kindle之上的版本,現在還有很多人用,可惜因為公司戰略調整的原因,這個產品被廢棄了。GTK及最基本的Linux應用更適合開發一些補丁性的小程式,來補充Kindle的基本功能。在Ubuntu上搭建kindle的gtk開發環境非常簡單,只需要一條命令:
sudo apt-get install pkg-config gcc-arm-linux-gnueabi libgtk2.0-dev
接著我們來寫一個hello world來驗證功能:(文件名:testGtk.c)
#include <gtk/gtk.h>
static void hello( GtkWidget *widget,gpointer data ) {
gtk_main_quit ();
}
static gboolean delete_event( GtkWidget *widget, GdkEvent *event, gpointer data ) {
g_print ("delete event occurred\n");
return FALSE; // we do want to quit
}
static void destroy( GtkWidget *widget, gpointer data ) {
gtk_main_quit ();
}
int main( int argc, char *argv[] ) {
GtkWidget *window;
GtkWidget *button;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "delete-event", G_CALLBACK (delete_event), NULL);
g_signal_connect (window, "destroy", G_CALLBACK (destroy), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
button = gtk_button_new_with_label ("Hello World");
g_signal_connect (button, "clicked", G_CALLBACK (hello), NULL);
gtk_container_add (GTK_CONTAINER (window), button);
gtk_window_set_title ( GTK_WINDOW(window) , "L:A_N:application_ID:test");
gtk_widget_show_all (window);
gtk_main ();
return 0;
}
接著先在桌面Linux電腦上編譯來試一下:
gcc -o testGtk testGtk.c `pkg-config gtk+-2.0 --cflags --libs`
在電腦上執行./testGtk,可以看到結果正確。
交叉編譯kindle的版本則相對比較複雜,我們還是直接寫一個Makefile吧,避免手工輸入太長容易出錯,同時Makefile中也增加了macos的編譯部分。gtk雖然看上去很陳舊、落伍,但是跨平臺用起來,其實比很多主流應用還要順暢。
GCC=gcc
ARMGCC=arm-linux-gnueabi-gcc
ARMLIBS=`pkg-config gtk+-2.0 --cflags` -L/usr/arm-linux-gnueabi/lib/ -L/home/andrew/dev/kindleLib/ -lgtk-x11-2.0 -lgdk-x11-2.0 -lXrender -lXinerama -lXext -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lXdamage -lXfixes -latk-1.0 -lcairo -lpixman-1 -lpng12 -lxcb-shm -lxcb-render -lX11 -lxcb -lXau -lXdmcp -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lfontconfig -lfreetype -lz -lexpat -lgobject-2.0 -lffi -lgmodule-2.0 -lgthread-2.0 -lglib-2.0
keys = testKindleGtk
all:$(keys) $(objs)
testKindleGtk:testGtk.c
$(ARMGCC) -o testKindleGtk testGtk.c $(ARMLIBS)
x86:
gcc -o testGtk testGtk.c `pkg-config gtk+-2.0 --cflags --libs`
osx:
export PKG_CONFIG_PATH=/usr/X11/lib/pkgconfig && gcc -o testGtk testGtk.c `pkg-config gtk+-2.0 --cflags --libs`
clean:
rm $(keys) testGtk
項目的源碼已經上傳到github,有興趣的可以下載試試。
咳。。。不好意思,原諒我把最重要的放到最後說,在kindle上測試這個程式,需要越獄kindle,在KPW2之間的版本,在網上搜索,有軟體的方法越獄。之後的版本就複雜了,可能還需要拆機引串口線的方式。
不過總感覺kindle的越獄還是很有意義的,主要是原生系統對於純文本的排版水平實在太差,我就是越獄後裝了再也見不到更新的多看系統。