在Ubuntu上搭建kindle gtk開發環境

来源:https://www.cnblogs.com/andrewwang/archive/2018/03/23/8635215.html
-Advertisement-
Play Games

某個角度上說,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的越獄還是很有意義的,主要是原生系統對於純文本的排版水平實在太差,我就是越獄後裝了再也見不到更新的多看系統。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在安裝 nginx 伺服器後,我想把網站的根目錄設置為 /root/www/ ,於是對 nginx 的 nginx.conf 文件進行配置 先打開 nginx.conf #user nobody; worker_processes 1; #error_log logs/error.log; #err ...
  • 概述 前面一篇 About Windows 10 SDK Preview Build 17110 中,我們簡單介紹了 Multi-instance UWP Apps,今天結合開發過程詳細講解一下。 在 Windows 10 Version 1803 以前,UWP App 同一時間只能啟動一個實例,而 ...
  • Unity C#開發中,常常用到Enum或Struct等類型作為Dictionary的key,或List的元素,即: List<EnumType>,Dictionary<EnumType, ValueType>,List<StructType>,Dictionary<StructType, Valu ...
  • using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.... ...
  • 在本篇文章中,學習添加用於管理資料庫中的書籍的實體類。通過實體框架(EF Core)使用這些類來處理資料庫。EF Core是一個對象關係映射(ORM)框架,它簡化了編寫資料庫訪問的代碼。 創建的實體類被稱為POCO類(“普通的CLR對象”)因為他們沒有在EF Core中有任何依賴。它... ...
  • <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...
  • 本文主要是在介紹CentOS7.2的環境下Nginx的使用。 ...
  • 操作系統用於管理系統的硬體、軟體和數據資源,控製程序的運行,是應用軟體與硬體之間的介面,也是人機之間的介面。操作系統的職能包括進程管理、存儲管理、文件管理、設備管理、作業管理等。 在進程管理中,PV操作在處理進程的同步與互斥問題方面非常重要,當多個進程需要同時訪問共用資源時會用到。PV是用荷蘭語表示 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...