分類彙整:軟件使用

分步驟圖解如何將Netbeans項目與GitHub代碼庫相同步

作者:愛飛翔(Jeffrey LEE)
原文網址:http://agilemobidev.com/eastarlee/software/netbeans/sync-netbeans-with-github-repository


編修記錄:

2015年7月28日09:05 添加GitHub導航欄的新截圖。
2016年2月16日02:37 強調生成SSH Key時所用的電子郵件地址一定要填寫正確。


這篇教程寫得比較長。Git是個分佈式代碼託管方案,有很多功能和用法。這裡只講了與GitHub倉庫及Netbeans項目有關的一些簡單用法,粗疏之處,敬請諒解。其它的用法,歡迎大家一起來研究。感謝諸位閱讀。

為了防止誤操作,請您先用一些範例代碼做個實驗,待熟悉整個流程之後,再開始正式使用。

為了防止干擾,建議您先關掉Netbeans中的所有項目。

目錄

  1. 創建GitHub代碼庫
  2. 為代碼庫添加協作者(可選)
  3. 生成SSH Key
  4. 添加SSH Key
  5. 創建Netbeans項目
  6. 把項目上傳到GitHub
  7. 解除Netbeans項目與GitHub代碼庫之間的同步關係
  8. 刪除本地的Netbeans項目
  9. 從GitHub倉庫中克隆項目
  10. 將GitHub倉庫中的變更同步到本地的Netbeans項目
  11. 修改本地項目,提交並同步到GitHub倉庫

1. 創建GitHub代碼庫

如果沒有GitHub賬戶,請先去https://github.com/註冊。

進入GitHub首頁,點擊「+ New Repository」按鈕。

在「Repository name」文本框中輸入代碼庫名稱,如果名稱可用,則文本框右側顯示對勾。

點擊「Create repository」按鈕,創建代碼庫。如下圖所示:

創建代碼庫

此時瀏覽器會顯示代碼庫首頁。首頁的網址形式為:https://github.com/username/reponame

其中username為用戶名,reponame為代碼庫名。

2. 為代碼庫添加協作者(可選)

如果要與他人一起管理代碼庫,那就進入代碼庫首頁,點擊右側面板底部的「Settings」按鈕,進入設置界面。

點擊左側面板的Collaborators按鈕。點擊之後可能要再度確認賬戶密碼方能進入。

在文本框中輸入協作者的帳號,如果GitHub中有帳號與您輸入的文字相關,那麼這些帳號就會列在文本框下方。用鼠標點擊您需要的帳號之後,「Add collaborator」按鈕會由灰變亮,點擊該按鈕即可添加協作者。

3. 生成SSH Key

本環節將以Ubuntu系統為例(其它Linux發行版的操作流程也與之類似)。Windows系統的配置方式請參考https://help.github.com/articles/generating-ssh-keys/#platform-windows,Mac系統請參考:https://help.github.com/articles/generating-ssh-keys/#platform-mac

如果本系統以前已經按此步驟生成了SSH Key,那就請跳過這一節。

在Ubuntu系統中按Ctrl+Alt+T,打開終端機。

執行ssh-keygen -t rsa -C "your_email@example.com"命令,其中引號內為註冊GitHub帳號時所用的電子郵件地址

注意:郵件地址一定要寫對。大小寫也要注意。github網站右上角的頭像右方有個倒三角符號,點擊之後會彈出下拉菜單,選擇Settings菜單項,會進入帳號設置界面。點擊左側Personal settings面板中的Emails菜單項,即可在右側的Email界面中看到主郵件地址(primary GitHub email address)。

控制檯提示「Enter file in which to save the key」時,直接按回車鍵。

控制檯提示「Enter passphrase (empty for no passphrase):」時,輸入您想為該SSH Key設置的口令,然後按回車。

控制檯提示「Enter same passphrase again:」時,再次輸入剛纔的口令,按回車。

執行eval "$(ssh-agent -s)"命令。

執行ssh-add ~/.ssh/id_rsa命令,控制檯會提示你輸入口令,也就是剛纔的passphrase。輸入之後按回車,提示「Identity added: ...」則說明執行成功。

4. 添加SSH Key

如果本系統以前已經按此步驟添加了SSH Key,那就請跳過這一節。

在終端機中執行sudo apt-get install xclip命令,這一步要輸入當前Ubuntu用戶的密碼,然後按回車,安裝xclip軟件。

執行xclip -sel clip < ~/.ssh/id_rsa.pub命令,該命令會把一些字符複製到系統的剪貼板裡面。

在GitHub網頁頂端的導航欄中,點擊右側的齒輪按鈕(該按鈕見下圖),進入配置頁面。

GitHub導航欄

翔按:目前的GitHub導航欄已有變化:導航欄最右側的頭像旁邊,有個下拉式菜單,Settings(配置)選項已經集成到了那個菜單裡面,如下圖所示。
新的GitHub導航欄

在左側的「Personal settings」面板中,點擊「SSH keys」按鈕。

點擊「Add SSH Key」按鈕,在下面的「Title」文本框中給這個SSH Key起個名字,例如可以輸入:My Ubuntu Notebook。

把剛纔通過xclip命令複製下來的字符,粘貼在「Key」文本框中。

按「Add key」按鈕,添加好之後,我們會看到頁面中列出了與這個key有關的一些信息。

在終端機裡執行ssh -T git@github.com命令。

控制檯提示「Are you sure you want to continue connecting」的時候輸入yes,並按回車,然後會看到「You've successfully authenticated」等信息,這說明我們可以用這個key與GitHub通信。

刷新GitHub的SSH keys配置頁面,我們會發現代表該key的鑰匙圖標左側,原來灰暗的小圓點已經變綠了。如下圖所示。

SSH Keys列表

5. 創建Netbeans項目

如果只是打算把本地已有的項目上傳到GitHub,而不想新建項目,那就在Netbeans裡打開該項目,然後跳到第6節

如果既不想創建新項目,也不想把已有項目上傳到GitHub,而是想把自己GitHub倉庫中的項目克隆到本地,那就請跳過5、6、7、8四節,直接看第9節

注意,上傳到GitHub公共倉庫中的代碼,可以公開閱覽。如果您不希望別人看到您的項目,那就不要將其上傳。您可以在GitHub上面找個自己感興趣的代碼庫,對其做個分支(Fork),然後跳到第9步

打開Netbeans,點擊「File」菜單下的「New Project…」菜單項。

此處以Java項目為例。我們在「New Project」對話框的「Categories:」列表框中,選擇Java,在「Projects:」列表框中,選擇「Java Application」,然後點擊「Next」按鈕。

在「New Java Application」對話框中,把項目名稱輸入到「Project Name」文本框裡,然後通過「Browse…」按鈕配置項目路徑。建議路徑裡不要有非英文字符。按「Finish」按鈕。

在主Java文件裡面輸入一些代碼,例如:

package com.agilemobidev;

public class HappyChess {
    public static void main(String[] args) {
        System.out.println("Hello, Java.");
    }
}

按F6鍵運行程序,確認該項目能正常運行。

6. 把項目上傳到GitHub

在「Projects」面板裡選中代表本項目的那個根節點。

點擊Netbeans的「Team」菜單,選擇「Git」子菜單下的「Initialize Repository…」菜單項。

在彈出的「Initialize a Git Repository」對話框中,按「OK」按鈕。(翔按:如果您想自己指定倉庫位置,那就請通過「Browse」按鈕來選擇。)

把Netbeans項目上傳到GitHub

在Netbeans左側的Projects面板中,找到表示項目的根節點。

右擊該節點,在彈出式菜單中選擇「Git」子菜單下的「Commit…」菜單項。

在彈出的「Commit」對話框中,把描述本次提交的信息(例如「Create Project’s Main Java File.」)輸入到「Commit Message」對話框中,按「Commit」按鈕。如下圖所示。

提交項目

在Netbeans左側的Projects面板中,找到表示項目的根節點。右擊該節點,在彈出式菜單中選擇「Git->Remote」子菜單下的「Push…」菜單項。

在彈出的「Push to Remote Repository」對話框中,選擇「Specify Git Repository Location」選項,然後把項目的倉庫網址,輸入到「Repository URL」文本框中,該網址的格式為:

github.com:username/reponame.git

其中的username是你的GitHub帳號,reponame是你的倉庫名稱。例如我填的就是

github.com:jeffreybaoshenlee/JavaGameArena.git

在「Username」文本框中輸入git

選擇「Private/Public Key」選項,通過「Private Key File」文本框右側的「Browse…」按鈕來選擇key文件,此文件的路徑一般是:~/.ssh/id_rsa.pub如果連接不上代碼庫,請嘗試~/.ssh/id_rsa),其中的波浪線代表當前Ubuntu用戶的home目錄。

在「Passphrase」文本框中輸入口令。如果不想每次輸入,那麼可以勾選右側的「Save Passphrase」複選框。此時的界面如下圖所示:

上傳到GitHub時所用的配置

點擊「Next」按鈕,如果能夠正常連接,該對話框就會跳轉到下一屏。如果不能,就請檢查密鑰文件和口令是否正確,並看看用戶名填的是不是git。另外請注意,操作系統可能會彈出寫有「輸入解鎖私密金鑰的密碼」字樣的對話框,此時請輸入你原來給key設置的口令。如果不想每次都輸入口令,那就勾選「當我登入時自動解鎖這個金鑰」這一複選框。輸入口令之後,按「確定」按鈕,關閉這個對話框。

在接下來的界面中,勾選「Local Branches」裡面的「master -> master [A]」條目,按「Next」按鈕。

勾選「Remote Branches」裡面的「master -> origin/master [A]」條目,按「Finish」按鈕。

Netbeans會彈出「Set Up Remote Tracking?」對話框,點擊「Yes」按鈕。

刷新GitHub網站的代碼庫主頁,即可看到裡面已經有了文件。

7. 解除Netbeans項目與GitHub代碼庫之間的同步關係

為了在第9步中告訴大家如何從GitHub中克隆項目,我們先通過7、8兩步,在本機上打造乾淨的環境。

如果對這些都不感興趣,那就請直接跳到第10節

點擊Netbeans的「Team」菜單,選擇「Disconnect…」菜單項。

在彈出的對話框中點擊「OK」按鈕。

8. 刪除本地的Netbeans項目

這一步純粹是為了演示而設計的,執行前請務必把項目文件夾備份到別處。

在Netbeans的「Projects」面板裡,右擊代表本項目的那個根節點。

在彈出式菜單中選擇「Delete」菜單項。如果該菜單項不可點選,那就關閉Netbeans,重新啓動再試一次。

在彈出的「Delete Project」對話框中,勾選「Also delete sources under …」條目,點擊「Yes」按鈕。

由於項目之下還有.git目錄尚未刪除,所以我們打開Ubuntu系統的文件管理器,找到代表本項目的文件夾(也就是第5步中配置的項目路徑),把該文件夾刪掉。

9. 從GitHub倉庫中克隆項目

假設你來到自己所擁有的另外一臺電腦上面,想把GitHub倉庫裡的代碼拿下來做開發,或是覺得GitHub上面的某個代碼庫比較有趣,對它做了分支(fork),現在想把分支下載到本地做開發,那就需要進行克隆了。

克隆之前請先保證第3、4兩步已經順利執行完畢

打開Netbeans的「Team」菜單,選擇「Git」子菜單下的「Clone…」菜單項。

在彈出的「Clone Repository」對話框中,把倉庫URL填寫到「Repository URL」文本框中,「Username」文本框中應該是git。

選中「Private/Public Key」選項,按照第6步中的辦法配置好「Private Key File」和「Passphrase」。

在對話框下半部分的「Specify Destination Folder」部分,通過「Browse…」按鈕來指定將要克隆出來的本項目,應該放在哪個文件夾的下面。比方說您想把本項目文件夾定為/projects/java/testgame,那麼就請通過「Browse…」按鈕定位到/projects/java/testgame上一層,也就是/projects/java。選好之後,這部分會出現在「Clone into」文本框中。如下圖所示:

從GitHub倉庫中克隆項目

點擊「Next」按鈕,勾選「Select Remote Branches」下面的「master*」條目。按「Next」按鈕。

在「Clone Name」文本框中輸入本項目文件夾的名字,例如我們要把項目保存到/projects/java/testgame,那麼這裡就填testgame,而「Parent Directory」文本框中顯示的內容,應該就是我們剛纔指定的/projects/java。按「Finish」按鈕。

克隆好之後,Netbeans會彈出「Clone Completed」對話框。點擊「Open Project」按鈕。

在左側「Projects」面板中找到表示本項目的那個根節點。

如果我們原來曾經解除過本項目文件夾與GitHub之間的連接關係,那麼在用鼠標右擊該節點後,彈出式菜單裡不會出現「Git」子菜單。我們需要點擊「Versioning」子菜單下的「Connect to Git」菜單項,如下圖所示。

重新將項目文件夾與GitHub相連

右擊項目根節點,如果能看到「Git」子菜單,則說明項目已正常克隆出來了。

10. 將GitHub倉庫中的變更同步到本地的Netbeans項目

此處的修改,不一定要通過GitHub網頁界面進行。有可能是項目的某位協作者修改了代碼並提交到了GitHub,而你想把修改後的代碼更新到自己電腦上看看。也可能是你在別的電腦中修改了項目,並上傳到了GitHub,現在又想在自己的另一臺電腦裡把修改後的項目更新出來看看。這裡之所以用GitHub界面來講述,只是想舉個例子而已。

在瀏覽器中打開GitHub倉庫的主頁,進入src文件夾,找到某個待修改的源代碼文件(比如Java文件)。

點擊該源碼文件,此時網頁會顯示出文件裡的源代碼。

點擊小鉛筆圖標,修改此文件。該圖標的位置,如下圖所示。

顯示源代碼的網頁

用編輯器來修改該文件。修改好之後,在「Commit changes」下面的文本框裡輸入提交理由,然後按「Commit changes」按鈕。執行此步驟時的界面,如下圖所示。

在GitHub中修改源文件

在Netbeans左側的「Projects」面板中右擊項目根節點,在「Git->Remote」子菜單中選擇「Show Incoming」菜單項,在「Show Incoming」分頁中,點擊工具欄上的「Diff」按鈕,切換到比對模式。在「Revision」一欄中,點擊修訂代號左側的三角符號,即可看到此次修訂所涉及的文件。點擊某個文件,即可在下方看到本地與遠端之間的差別。效果如下圖所示。

對比差別

關閉該分頁。右擊項目根節點,在「Git->Remote」子菜單中選擇「Pull from Upstream」菜單項,即可將遠端倉庫的變更同步到本地項目。

11. 修改本地項目,提交並同步到GitHub倉庫

打開項目中的某個源文件,做出一些修改。運行項目,確認無誤後,準備提交。

右擊「Projects」面板中的項目根節點,點擊「Git」菜單下的「Commit…」菜單項。輸入提交信息,點擊「Commit」按鈕提交。

右擊「Projects」面板中的項目根節點,點擊「Git->Remote」子菜單下的「Push to Upstream」菜單項。如果順利,就會把本地的修改提交到遠端倉庫。

a. 如果遠端倉庫裡還有變更沒有同步到本地,而本地又要往遠端提交,則會失敗。此時彈出「Git Push Failed」對話框。如果確定遠端的新內容不會影響到本次提交,那就點擊「Pull Changes」按鈕。如果不能確定,那就先點擊「Cancel」,然後通過「Show Incoming」界面來比對兩邊的版本,並做出相應處理。

b. 點擊「Pull Changes」按鈕之後,Netbeans會彈出「Merge Commit Needed」對話框,詢問您如何處理當前分支的地位問題。我喜歡選擇「Merge」。

c-1. 如果沒有衝突,那麼接下來會彈出「Remote Changes Pulled」對話框,選擇「Yes」按鈕,完成同步。

c-2. 如果有衝突,那就彈出「Resolve Conflicts」按鈕,此時需要解決衝突。比方說同一個文件,遠端也修改了,本地也修改了,這就衝突了。點擊「Resolve」按鈕,解決此衝突。在「Merge Conflicts Resolver」分頁中,觀察衝突的各個文件。如果接受本地版本,就點擊左欄上方的「Accept」按鈕,如果接受遠端版本,就點擊右欄上方的「Accept」按鈕,如果同時接受兩者,就點擊「Accept Both」。解決完所有衝突之後,點擊分頁右下角的「OK」按鈕。Netbeans會提示保存文件。保存好之後,重新執行執行Commit和Push to Upstream即可。衝突解決界面如圖所示。

衝突解決界面

為了避免上述麻煩,筆者建議大家在Commit之前先通過Show Incoming看一看遠端是否有變更,如果有,而且又和本地的這些變更之間沒有關係,那就執行Pull from Upstream,把遠端的變更先同步下來。這樣Push to Upstream的時候能夠順利一些。

本文先寫到這裡。再次感謝您閱讀。

轉載請註明本文作者,並給出該網頁網址,多謝合作。

在Ubuntu系統下給Netbeans 8.0.2或Netbeans 8.1安裝Python插件

作者:愛飛翔(Jeffrey LEE)

最近幾個月和朋友一起學Python,這裡把在Ubuntu系統下給Netbeans 8.0.2或Netbeans 8.1安裝Python插件(plugin,也稱為「外掛程式」)的方法簡述一下。

1.確認使用情境

如果您的Netbeans是8.1版,那麼無需參照此教程的第3、4兩步進行安裝,而是只需通過Tools菜單下的Plugin菜單項打開插件對話框,然後切換到available(可用的插件)分頁,以Python為關鍵字來搜尋nbPython插件並安裝即可,如下圖所示。

感謝nbPython的開發者製作了這個插件,他們的網站是:http://nbpython.org/

安裝好該插件之後,可以按照第5步來配置Python平臺,並按照第6、7兩步來測試Python平臺配置得是否正確。

install-python-plugin-in-nb81

如果您使用的Netbeans是8.1和8.0.2之外的其它版本,那麼請按照Netbeans網站所給出的建議來操作:
http://wiki.netbeans.org/PythonInstall

如果您使用的Netbeans確實是8.0.2版,那麼請閱讀本教程。

請注意:無論是哪個版本的Netbeans,一般都會提供多種套件(bundle,也稱為「下載包」)以供下載。對於只開發Python的人來說,我推薦使用Java SE套件。

2.致謝

本文根據Geertjan Wielenga先生的教程(https://blogs.oracle.com/geertjan/entry/python_in_netbeans_ide_81)改編。感謝Geertjan撰寫此教程。Geertjan還錄製了一段視頻教程,請見:https://www.youtube.com/watch?v=QsfnhJ-ABDc&feature=youtu.be

感謝Python Project項目(https://netbeans.org/projects/python/pages/Home)為Netbeans提供Python支援。

使用Python插件的時候如果發現bug,請回報到它的Bug列表:https://netbeans.org/bugzilla/buglist.cgi?bug_status=NEW&bug_status=STARTED&bug_status=REOPENED&list_id=648030&order=changeddate%20DESC%2Cbug_status%2Cpriority%2Cassigned_to%2Cbug_id&product=python&query_based_on=&query_format=advanced

3.下載並解壓Python4NetBeans802插件

http://plugins.netbeans.org/plugin/56795?show=true頁面下載插件,將其解壓縮。

4.安裝插件

打開Netbeans 8.0.2,選擇「Tools」菜單下的「Plugins」菜單項,打開「Plugins」對話框。

切換到「Downloaded」分頁,點擊「Add Plugins…」按鈕,彈出「Add Plugins」對話框。

定位到插件解壓縮之後的文件夾,把裡面的所有.nbm文件全都選中。注意,大概有10個文件。您可以拖拽這個對話框的邊框,將其放大,這樣就能看到並選取更多文件。也可以先選中某個.nbm文件,然後再按Ctrl+A,即可選中該目錄下所有文件。

按「確定」按鈕,返回「Plugins」對話框。此時對話框應該像下圖這樣:

添加好的Python插件

點擊「Install」按鈕,彈出「Netbeans IDE Installer」對話框。點擊「Next」按鈕,此時可以查看各插件的授權協議。如果您接受這些協議,那就選中「I accept the terms in all of the license agreements.」複選框,並點擊「Install」按鈕。

彈出「Validation Warning」對話框,點擊「Continue」按鈕。

插件安裝完畢之後,點擊「Finish」按鈕,回到「Plugins」對話框。點擊「Close」按鈕,將該對話框關閉。

5.配置Python平臺

點擊Netbeans的「Tools」菜單,選擇「Python Platforms」菜單項,彈出如下圖所示的「Python Platform Manager」對話框。

Python平臺管理器

我們看到,默認只把Python 2.x版本的Python平臺加了進來。有些時候,我們需要拿Python 3.x來開發,所以可以在此處把Python 3.x平臺配置好。(翔按:這裡的Python 3.x,泛指一切大版本為3的Python,3後面的小版本是多少,根據您的具體情況來定。Python 2.x也是如此。)

點擊「New」按鈕,彈出「開啟」對話框。定位到/usr/bin/資料夾下面的python3文件,點擊「確定」按鈕。此時會看到Python 3出現在了Platforms列表中,如下圖所示。

添加好Python3平臺之後的Python平臺管理器

如果想把Python 3.x平臺設為默認,那就先在列表裡選中這個平臺,然後點擊「Make Default」按鈕。這時,Python 3.x平臺的名稱右側,會出現「(Default)」字樣,而原來Python 2.x平臺右側的「(Default)」則消失。

點擊「Close」按鈕,關閉「Python Platform Manager」對話框。

6.新建Python項目

點擊Netbeans的「File」菜單,選中「New Project…」菜單項,彈出「New Project」對話框。

在「Categories」列表裡選中「Python」,在「Projects」列表裡選擇「Python Project」(翔按:對於Netbeans 8.1來說,可以根據自己的操作系統來選擇「Python Project – Ant」或「Python Project – Setuptools」),按「Next」按鈕,彈出「New Python Project」對話框。

在「Project Name」文本框中輸入項目名稱(翔按:建議使用純英文和數字)。

點擊「Project Location」文本框右側的「Browse…」按鈕,選擇項目的保存路徑,彈出「Select Project Location」對話框。選好項目路徑之後(翔按:建議路徑之中不要帶有英文與數字之外的符號,也不要帶有空格),按「確定」按鈕,返回「New Python Project」對話框。

在「Python Platform」下拉列表框中選擇該項目所使用的Python平臺,按「Finish」按鈕。配置好的「New Python Project」對話框如下圖所示。

配置好的「New Python Project」對話框

7.編寫代碼並運行

在hellopython.py文件中輸入一些代碼,比如:

def hello_python():
    hello_str="Hello Python."
    print(hello_str)
    print(type(hello_str))

if __name__ == "__main__":
    hello_python()

按Ctrl+S鍵保存文件,再按F6鍵運行。控制檯裡可以看到輸出效果,如下圖所示。

編輯並運行Python代碼

就寫到這裡吧。感謝大家閱讀。

轉貼請註明作者和本頁面網址,謝謝支持。

【保留數據刷機】Nexus 5和Nexus 10以OTA方式從Android 5.0升級5.0.1、從5.0.1升級5.0.2、從5.0.2升級5.1、從5.1升級5.1.1、從5.1.1升級6.0失敗後的解決辦法

註:Nexus 10只能升級到5.1.1。

本文以Nexus 10從Android 5.0升級5.0.1為例做講解。Nexus 5亦可按相似步驟操作。

設備已root。接到OTA後開始升級,設備重啓後失敗,提示/system/bin/install-recovery.sh has unexpected contents等錯誤。
重啓進入系統,永久取消root。以sideload方式刷升級包,依然失敗。
於是我試着按照錯誤提示,一步步修改升級包中的updater-script,將引發錯誤的動作註釋掉,然後把updater-script重新灌入升級包,逐漸消除報錯信息。等徹底沒有錯誤時,發現升級完之後設備卡在開機動畫那裡。

看來刷升級包是不太容易了,後來,找到下面這種解決辦法,通過刷原廠鏡像來升級:
https://developers.google.com/android/nexus/images 下載5.0.1工廠鏡像。
按照Massimiliano Ferrari所寫 http://techforpassion.blogspot.tw/2013/11/flash-android-factory-image-without-wiping-device-after-failed-ota-update-unbrick.html 一文,在不清除用戶數據前提下刷入原廠鏡像。

那篇文章的重點就是修改與系統總鏡像(例如image-mantaray-lrx22g.zip)處在同一目錄下的flash-all.shflash-all.bat文件,把可能清除用戶數據的命令或參數刪掉。例如,對於用Ubuntu系統來刷機的用戶來說,可以刪除flash-all.sh文件中的fastboot erase userdata命令行,以及fastboot -w update xxx.zip命令行中的-w選項xxx.zip為系統總鏡像的文件名,下文中的xxx.img為bootloader鏡像的文件名;另外請注意:如果刷Nexus 5,那麼只需把fastboot update那一行的-w去掉即可),使得該文件變成如下形式:

#!/bin/sh

# Copyright 2012 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

fastboot erase boot
fastboot erase cache
fastboot erase recovery
fastboot erase system
fastboot flash bootloader xxx.img
fastboot reboot-bootloader
sleep 5
fastboot update xxx.zip

 

把設備和電腦相連,最好連接到機箱後面的面版。然後在終端機裡用adb devices命令看看設備是否正常連上,如果attached一欄顯示no permissions,那就執行sudo adb kill-server及sudo adb start-server,然後重新執行adb devices。

如果attached一欄顯示offline,則可以點擊設置界面中「開發人員選項」裡的「撤銷USB偵錯授權」按鈕,然後把「USB偵錯」開關關掉,再打開,重新給電腦授予調試設備的權限。再次用adb devices命令查看,如果attached一欄顯示device,則說明正常。

在更換數據線或把多臺設備連到同一臺電腦時,可能出現這兩個問題。

通過adb reboot-bootloader命令,將設備重啓到bootloader模式,然後用修改好的flash-all.sh文件刷機即可。Windows用戶需要修改的是flash-all.bat,並且需要用它來刷機。

注意事項:

  • 如果從命令行裡執行flash-all.sh文件,那麼執行前,請先將工作目錄切換到該文件所在目錄,因為flash-all.sh還要用到其它一些文件,而那些文件,通常都會放在與flash-all.sh相同的目錄之中。
  • 可能需要用sudo來執行flash-all.sh
  • 如果提示找不到fastboot命令,那麼可以通過apt-get或Synaptic安裝相應的工具,或者把那些刷機文件都放到android sdk的platform-tools目錄下,並把flash-all.sh中的fastboot改為./fastboot
  • 如果電腦是臺式機,那麼最好把數據線插到機箱後面版。

設備重啓後可能依然卡在開機動畫那裡(Nexus 5以不清除用戶數據的方式,從5.0.1升級到5.1時,沒有這種現象)。

如果真的卡住了,那就通過adb reboot recovery命令,使設備進入recovery模式,發現屏幕上提示failed to mount /cache字樣。此時可以先按下電源鍵不放,然後按音量提高鍵,待屏幕上出現菜單之後,鬆開兩鍵。通過wipe cache操作來格式化cache分區。此步驟比較耗時,需耐心等待。

重啓設備,這次也要在啓動動畫那裡停留一段時間。

經過軟件升級步驟之後,已能順利進入5.0.1系統。

進入bootloader模式刷root包,再重啓設備,這次順利進入5.0.1系統,且已具備root權限。
注意:刷好root包後重啓的時候,設備可能會黑屏。此時可以按住電源鍵不放,強行關閉平板,然後再開啓。

從5.0.1升級至5.0.2、從5.0.2升級至5.1、從5.1升級至5.1.1時,亦可按照上述步驟操作。

特別提示:

為了節省時間,升級好Nexus 10之後,先進入recovery模式清除緩存,等清除完緩存之後,直接在recovery菜單中選擇reboot to bootloader,把設備重啓到bootloader模式下,並刷入root包,這樣開機之後,只需升級一輪應用程序即可。如果在recovery模式下清除完緩存之後不重啓到bootloader,而是正常開機,那麼就要先升級一輪應用程序,然後等刷完root之後,又要升級一輪,比較耗時。

Nexus 5及Nexus 10從Android 4.4.4(KitKat)升級至Android 5.0(Lollipop)之情況

大家好,現在我簡單說一下兩臺設備升級至Android 5.0時的情況。

手機和平板都已root過(也就是獲取了根權限的意思)。

前陣子收到OTA更新提示,在開始下載升級包之前,我先對Nexus 5做了如下處理:

  • 當時為了嘗試XPrivacy插件,安裝了Xposed框架。現在暫時將其禁用,但不立刻重啓手機。另外,在 設定->安全性->裝置管理員 中取消了XPrivacy的權限。
  • 為保險起見,卸載了avast!防毒軟件的ANTI_THEFT。若不卸載它,是否能順利更新,還不太清楚。
  • 開啓SuperSU軟件的生存模式。

處理好之後,下載升級包。下載完畢後,建議大家先把根目錄下cache子目錄中的更新包文件拷貝到手機ROM中。萬一更新失敗,還可以在電腦上通過命令行來刷入更新包。

現在開始升級,升級過程比較順利,機器重啓之後會進入升級界面。升級結束後又重啓,這次會在開機動畫(也就是四個圓點來回滾動的那個畫面)那裡停留很久。耐心等待之後會彈出對話框,說正在優化手機裡的程序。優化完畢後進入Android 5.0系統。

此時打開SuperSU軟件,會發現root失效。從 http://autoroot.chainfire.eu/ 下載升級包並刷入,即可重新獲得root權限。

Nexus 10之升級過程與Nexus 5相似。

以上內容僅供大家參考。

64位Linux操作系統運行32位遊戲時出現libopenal.so.1相關錯誤之解決方案

下載獨立遊戲《Donkey-Me》http://www.bruneras.com/games_donkeyme.php)並解壓縮,用終端機進入遊戲主目錄後,發現無法以./runner命令來運行遊戲。想到還沒給它添加可執行權限,於是就用chmod +x runner命令為其添加該權限。

加上後依然無法運行,提示error while loading shared libraries: libopenal.so.1錯誤,經核查,發現系統已經裝有libopenal1包,參考網帖後,以sudo ln -s /usr/lib/x86_64-linux-gnu/libopenal.so.1 /usr/lib/libopenal.so.1命令創建鏈接。本來我想把鏈接創建到遊戲可執行文件所在目錄,試過之後發現不行,估計遊戲還是會從/usr/lib中搜尋相關程序庫吧。

這樣運行,又提示wrong ELF class: ELFCLASS64錯誤,想到可能是因為遊戲要用32位libopenal1包,於是用sudo apt-get install libopenal1:i386命令安裝該包,並執行sudo ln -s /usr/lib/i386-linux-gnu/libopenal.so.1 /usr/lib/libopenal.so.1 -f命令,重新創建鏈接。

再次運行,問題解決。

順便說說:《Donkey-Me》是一款向《Donkey Kong》(大金剛)致敬之遊戲,復古像素風格,蠻好玩,大家不妨一試。

參考資料:

《error while loading shared libraries: libopenal.so.0: …》
https://bbs.archlinux.org/viewtopic.php?id=66758

《Is it possible to have 32 bit libraries installed on a 64 bit system?》
http://askubuntu.com/questions/60751/is-it-possible-to-have-32-bit-libraries-installed-on-a-64-bit-system

Nexus 5從4.4.2升級4.4.3之步驟

  翔按:假如您未刷Root,或Root之後沒有安裝「特殊」軟件,那麼手機端接到升級通知後,就應該能以「OTA」方式正常升級了。在那種情況下,似乎無需閱讀本文。但如果您像我一樣,對手機瀏覽器做了「改裝」,或是安裝了Xposed等框架,那麼不妨一讀。另外,您也可以不按本文操作,而是採用「生存模式」來解決問題。相關資料請上網搜尋。該模式可能需要SuperSU Pro。(翔按:可以通過「開啓專業版」選項直接開啓Pro版本。開啓後需要重啓SuperSU。)

  2014年6月26日補記:用OTA方式可以從4.4.3正常更新至4.4.4。由於更新前沒有開啓「生存模式」,所以更新後失去root權限。刷入chainfire所製作「一鍵式recovery與root刷機包」,並重新安裝相關APK文件即可。

  今天(2014年6月10日)中午睡起來,突然發現Nexus 5推送升級通知了。它可比Nexus 10晚了四天,N10在上週五(2014年6日6日)即收到通知。我按照正常步驟下載升級包,然後重啓。

  1. 運用升級包時提示帶有「Browser」字樣之錯誤,其原因乃在於我當時迷戀所謂「系統原生瀏覽器」,從而採用某種辦法將對應apk放入ROM中所致。當時我曾把/system/app中之「BrowserProviderProxy.apk」與「BrowserProviderProxy.odex」文件都加了「.old」後綴名,現在刪去兩文件之「.old」後綴,並把原來放入之Browser.apk刪掉(或轉移走)。翔按:此過程可能需要「root權限」,所以請勿剛開機就急於操作,而是應該等待各種預設程序啓動好之後再操作纔好,否則可能要等很長時間。
  2. 解決上述問題之後,重新檢查系統更新,這次居然沒有推送升級通知。本想從/cache中把zip升級包拷貝到「sdcard」(翔按:Nexus 5沒有sdcard,它只是個虛擬名號罷了),在複製到電腦端,結果發現/cache中已經沒有這個zip了。只好從http://android.clients.google.com/packages/ota/google_hammerhead/d173d546ab2347ead90cb0978657f11046300511.signed-hammerhead-KTU84M-from-KOT49H.d173d546.zip手工下載這個文件。
  3. 為了令升級過程少一些干擾,我在「設定->安全性->裝置管理員」中,把現有各項都取消了。
  4. 下載之後,我將其複製到電腦端,然後把手機重啓到bootloader,並進入官方recovery,開啓sideload功能。這時我從電腦端試圖將4.4.2升4.4.3所用zip文件刷入手機,可是手機卻說「system/bin/app_process has unexpected contents」,一番檢索之後,發現可能是當時在手機上安裝了Xposed所致。遂正常啓動手機,進入Xposed Installer程序,將Xposed框架卸載。
  5. 重新sideload之後,未提示錯誤。為求穩健,我又重新刷入「一鍵式recovery與root刷機包」(請參考http://autoroot.chainfire.eu/),並重啓手機。這次會逐個更新已安裝之程序,更新之後進入Android系統,發現版本已是4.4.3。但是卻找不到SuperSU程序了。
  6. 本想通過sideload刷入「clockwork定製版recovery」及chainfire網站之「supersu」包,但手機卻提示簽名錯誤。此問題小愛暫時不明其緣由,哪位朋友若知曉,煩請賜教。另外,每次進入bootloader時,手機總是提示一行字,說「secure boot」已經「enabled」了,網上有人說「secure boot enabled」類似於HTC手機之「S-ON」(參考https://plus.google.com/103583939320326217147/posts/P1i8qzLfkTm,感謝該文作者Koushik Dutta),我也查不到如何將其關閉,暫且存疑。
  7. 後來經網上帖子指點,其實只需在Android系統裡面通過文件管理工具找到/system/app/Superuser.apk,並重新安裝即可。安裝該文件需要較長時間,如果發現遲遲未裝好,可先打開Play商店,令其識別出手機內現有軟件。另外,安裝完SuperSU之後,可以去Play商店更新一下該軟件。

  以上就是這次升級全過程,小愛將其寫下來,供各位朋友參考。在此過程中,受到了下列文章之啓發,在此對其作者及跟帖者表示感謝。

《[求助] 4.4 OTA失敗 求助》
http://bbs.gfan.com/android-6990440-1-1.html
作者:雲之龍,跟帖者:十葉十葉

《Easy Android ROMs Customization Through Xposed Framework》
http://www.hongkiat.com/blog/add-features-android-xposed-framework/
作者:Nels Dzyre

《Nexus 5 Receives Android 4.4.3 (KTU84M) Official OTA Update [Changelog and Manual Installation]》
http://www.ibtimes.co.uk/nexus-5-receives-android-4-4-3-ktu84m-official-ota-update-changelog-manual-installation-1451151
作者:Sarmistha Acharya

Ubuntu 系統 LibreOffice Draw 無法啓動之解決方案

  更新到Ubuntu 14.04之後,今天偶然發現LibreOffice Draw無法啓動,點擊程序圖標之後,出現閃屏(splash)畫面,過後卻不顯示主界面。

  在終端機裡面通過libreoffice --draw命令啓動,程序走過閃屏畫面之後即退出。後來又在終端機裡通過/usr/lib/libreoffice/program/soffice.bin先啓動LibreOffice整合界面,然後點擊「Draw 繪圖」按鈕,這次在程序崩潰之後,終端機會提示「記憶體區段錯誤」。

  嘗試許久,終於找到解決方案:安裝LibreOffice Impress之後,Draw即可啓動。翔按:可在終端機裡通過sudo apt-get install libreoffice-impress命令來安裝LibreOffice Impress。

  今天就這個問題,特撰文告知大家。

Nexus設備刷原廠鏡像時所需注意之事項

今日看到Nexus 10提示可升級至4.4.2,遂升級之,平板重啓之後,開始運用升級包,過程中提示簽名驗證失敗。clockwork會彈出菜單,我通過菜單強行將升級包刷入,然後clockwork還會提示root權限可能丟失,問是否修復,我選擇了修復。

重啓平板後,一直卡在黑底白字Google畫面不動。關機後反復重啓,反復卡住。所幸可進bootloader,試着清理緩存分區,可是無效,又試着恢復出廠設置,依然無效,只能刷原廠鏡像,花費好幾個小時總算修復好。現將注意事項總結如下。

  1. Google官網所列下載地址偶爾會有問題,請尋找有效下載源。起初在官網頁面(https://developers.google.com/android/nexus/images)下載Nexus 10所用之Android 4.4.2原廠鏡像,但卻回報404錯誤。後於XDA論壇找到此文:http://www.xda-developers.com/android/android-4-4-2-kot49h-source-code-released-factory-images-for-nexus-4-5-7-and-10/,其中列出了正確地址,在此感謝該帖作者WILL VERDUZCO。
  2. 看清設備名,勿下載成其他設備所用鏡像。剛開始我比較着急,不慎下載成Nexus 5之鏡像,刷入時提示「partition table update fail」。我還以為分區表壞了,後來纔發現下錯了。
  3. 刷入系統鏡像時可能會卡在「send ‘SYSTEM’」這一行。將USB線由主機前端拔出,改插在電腦主機後端之USB接口上,重新刷機即可。
  4. 在Ubuntu系統刷機時,為便於操作,可把所下zip文件解壓到Android SDK之platform-tools子目錄,為flash-all.sh加可執行權限,並在命令行中以「sudo ./flash-all.sh」方式執行。另外為保險起見,可將flash-all.sh腳本中所有「fastboot」命令均改為「sudo ./fastboot」。
  5. 刷機之後重啓,已可正常進系統。此時可先關機,於http://autoroot.chainfire.eu/下載「一鍵式recovery與root刷機包」。據本人使用經驗,此法所刷之recovery似乎比手工所刷之clockwork穩定,至少Nexus 5在用它處理之後,從4.4升級至4.4.2時未出現如此嚴重之狀況。

Nexus 10由Android 4.3升級至4.4之步驟(由4.4.2升級至4.4.3時,亦可遵循此步驟)

2014年6月8日補記

  這週五(2014年6月6日)收到Nexus 10升級提醒,遂升級操作系統。平板重啓並進入Recovery界面之後,與原來一樣,提示簽名認證錯誤。再次重啓,居然發現無法啓動到正常操作系統了。

  我嘗試將升級包提取到臺式機,並修改其「更新腳本」,把某些升級操作從中刪去,然後通過sideload方式把修改後之升級包刷入平板。這次不提示錯誤了,但是重啓後依然無法進操作系統。

  最後只得徹底重新刷機。今天根據此次刷機過程,補充附錄D,並對文中相關細節略加修改。

2014年7月9日補記

  開啓SuperSU軟件「生存模式」之後,從4.4.3升級至4.4.4時,未發生錯誤。

注意事項

  1. 打開平板的USB調試選項。
  2. 把連接到電腦的其他Android設備拔掉。
  3. 如果在執行adb、fastboot等命令時,發生權限錯誤(insufficient permissions for device),那麼先執行「sudo ./adb kill-server」,然後執行「sudo ./adb start-server」即可。
  4. 如果電腦操作系統不是Linux,那麼執行命令時無需加sudo,另外可能需要安裝驅動程序纔能使電腦識別到平板
  5. 在命令行中執行adb、fastboot等命令之前,應該首先進入Android SDK安裝目錄下的platform-tools目錄,不然系統可能找不到相關命令。此外,對於Ubuntu等Linux系統來說,還可以通過apt-get來安裝整個系統通用的adb工具,那樣的話,就不用在執行adb命令時加上./前綴了。
  6. 如果不小心進入了官方的recovery,也就是帶有紅色三角及驚歎號的那個畫面,那麼請「先」住按電源鍵不放,「再」按音量提高鍵,這樣就能彈出其菜單了。網上說「同時」按住電源鍵和音量提高鍵,有可能不起作用。在這個recovery中,可以直接按平板電源鍵重啓,也可以通過彈出式菜單來重啓。

Nexus 10由Android 4.3升級至Android 4.4之主要步驟

  1. 在運行Android 4.3系統時,發現其提示可以升級至4.4,遂應用更新包,平板重啓之後提示簽名驗證錯誤。再開機後仍然進入4.3系統。
  2. 用「ES檔案瀏覽器」等應用程序,把根目錄下cache文件夾裡的28c35b553b1097af51f730c57e8c534f42662f42.signed-mantaray-KRT16S-from-JWR66Y.28c35b55.zip文件複製到「SD卡」(也就是「機身自帶的ROM存儲空間」)裡。
  3. 通過AirDroid、無線傳輸或數據線等方式,將剛纔的zip文件複製到電腦中。
  4. 用USB線連將平板連接至電腦。
  5. 打開命令提示符,執行「sudo ./adb devices」,確認平板已經和電腦連接好。
  6. 進入recovery,如果平板正中帶有紅色三角,其中還含有驚歎號,則說明該平板的recovery是官方版,而不是clockwork定製版。需要刷成clockwork。
  7. 通過recovery菜單開啓sideload功能(參見附錄D),在電腦命令行窗口執行「sudo ./adb sideload 更新包文件名」,即可更新Android系統了。如果更新包與adb在同一文件夾下,那麼「更新包文件名」前面不帶路徑,否則就帶上路徑。假如刷入更新包時卡在「send: …」這一行,那麼可將USB線由主機前端拔出,改插在電腦主機後端之USB接口上,重新執行刷包命令即可。
  8. 重啓系統後訪問SuperSU等程序,會發現root已失效,而且recovery可能也已經變成官方版了。請按照附錄C重刷root。

附錄A 進入bootloader的方法

  • 方法一:在設備正常開機,並與電腦相連的狀態下,在電腦終端機裡執行「sudo ./adb reboot-bootloader」,將設備引導至bootloader。
  • 方法二:把平板關閉,然後同時按住電源、音量加、音量減這三個鍵。

附錄B 進入recovery的方法

  • 方法一:在設備正常開機,並與電腦相連的狀態下,執行「sudo ./adb reboot recovery」,將設備引導至recovery。
  • 方法二:先進入bootloader,然後通過音量增減按鈕把菜單調整至「recovery mode」這一項,然後按電源鍵進入。

附錄C 由官方recovery刷clockwork定製版recovery,並順便root的辦法

  1. 將待刷的clockwork鏡像下載到電腦。下載網址:http://www.clockworkmod.com/rommanager
  2. 將supersu文件下載到平板ROM空間或電腦中。下載網址:http://download.chainfire.eu/supersu
  3. 進入bootloader,將平板與電腦相連,執行「sudo ./fastboot flash recovery 鏡像文件名」,如果鏡像與fastboot在同一文件夾下,那麼「鏡像文件名」前面不帶路徑,否則就帶上路徑。如果命令遲遲未執行完,則有可能是鏡像文件名太長或路徑太複雜而致,請把文件名與路徑起得簡潔一些,然後重啓平板,重新刷recovery。
  4. 刷完之後不要重啓,而是通過音量上、音量下按鈕直接把菜單調至「recovery mode」這一項,然後按電源鍵啓動至recovery。
  5. 如果supersu文件放在平板裡,那就在clockwork版recovery界面裡,選擇「flash zip from sdcard」菜單,然後選擇「choose zip from sdcard」菜單項,通過方向鍵定位至superus文件,將其刷入平板。若文件放在電腦裡,則先參考附錄D,在recovery界面裡開啓sideload功能,然後再於電腦端通過sideload方式將其刷入平板。(如果電腦使用Ubuntu操作系統,那麼可以在終端機裡通過「sudo ./adb sideload 待刷文件名」命令來執行sideload。)
  6. 返回上一級菜單,通過recovery的「reboot system now」菜單項重啓平板。
  7. 進入操作系統之後,如果能正常打開SuperSU程序,則說明root成功。

附錄D 在Recovery界面裡開啓sideload功能

  • 具體操作步驟可能因recovery之版本而不同,對於ClockwordMod Recovery v6.0.4.7來說,通過「install zip」菜單之「install zip from sideload」菜單項,即可啓用該功能。
  • 對於官方Recovery來說,可以「先」按住電源鍵不放,「再」按音量提高鍵,等待菜單彈出(翔按:有些設備可能要先鬆開音量提高鍵,再鬆開電源鍵,然後纔會彈出菜單),並通過其中選項來開啓sideload。

參考資料