Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> 基於Linux命令行構建Android應用(7)Android應用構建流程

基於Linux命令行構建Android應用(7)Android應用構建流程

編輯:Android開發實例

 本章將演示如何基於 Linux 命令行構建 Android 應用,在開始本章之前,希望你已經閱讀之前幾章內容。

 

  本文環境為 RHEL Sandiego 32-bits,要基於 Linux CLI 構建 Android 應用,先決環境為:

    1. JDK[1]

    2. Android SDK

    3. Apache Ant

  

  安裝過程需要使用 sudo 權限。

 

1. 搭建環境

 

1.1. 安裝 JDK

 

  JDK 是構建 Android 應用先決條件之一,由於版權原因,一般安裝 Open JDK。

  

  RHEL 中使用 yum 安裝,我們選擇安裝 java-1.7.0-openjdk-devel(即 Java 7)[2]

# yum upgrade
...
# yum install java-1.7.0-openjdk-devel

 

   如果你使用程序包管理工具例如 yum 安裝 JDK,那麼 yum 已經為你處理好了一切,系統可以自動找到 JDK 提供的各種工具。如果你是手動安裝,你需要手動聲明 JAVA_HOME 環境變量以便稍後 Ant 可以找到 JDK 提供的各種工具。

$ vi ~/.bash_profile

在最後一行輸入:

export JAVA_HOME=<你的 JDK 安裝路徑>

 

1.2. 安裝 Android SDK

 

  Android 官方提供了適用不同開發環境的 Android SDK,我們選擇安裝適用於 Linux CLI 的 SDK Tools Only:

$ cd ~/downloads
$ wget https://dl.google.com/android/android-sdk_r23.0.2-linux.tgz
$ tar zxvf android-sdk_r23.0.2-linux.tgz -C ~/work/env

 

  以上命令將 android-sdk_r23.0.2-linux.tgz 下載到用戶的 ~/downloads 目錄,然後解壓到用戶的 ~/work/env 目錄下,在該目錄下會有一個 android-sdk-linux 目錄,所以你的 Android SDK 安裝目錄為 ~/work/env/android-sdk-linux。你可以將 Android SDK 目錄解壓到任何地方,只要你記得它在哪裡即可。

  

配置 Android SDK 環境變量

 

  將 Android SDK 中的 platform-tools/ 和 tools/ 目錄添加到系統可執行路徑中。編輯 ~/.bash_profile 文件(將其中的 $HOME/work/env/android-sdk-linux 替換為你的 Android SDK 安裝路徑)

# configure android sdk path
PATH=$PATH:$HOME/work/env/android-sdk-linux/tools
PATH=$PATH:$HOME/work/env/android-sdk-linux/platform-tools
export PATH

 

  另外根據你系統架構設置 ANDROID_SWT 環境變量。

  32 位:

export ANDROID_SWT=/home/android/work/env/android-sdk-linux/tools/lib/x86

  64 位:

$ export ANDROID_SWT=/home/web_monitor/Downloads/android-sdk-linux/tools/lib/x86 _64

 

1.3. 安裝 Apache Ant

  

  Ant 是一個 Java 項目構建工具,也是 Android SDK 默認支持的構建工具。更多關於 Ant 介紹  

 

  你可以使用 yum 自動安裝 Ant[3]

# yum install ant

 

  在使用 Ant 的時候你可能遇到以下錯誤提示:

...
199: No supported regular expression matcher found: java.lang.ClassNotFoundException: org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp
...

 

  解決方法是安裝 ant-apache-regexp[4]

$ sudo yum install ant-apache-regexp

 

配置 Ant 環境變量

 

  我實際的 Ant 版本為 1.9.4,安裝路徑為 ~/work/env/apache-ant-1.9.4,編輯 ~/.bash_profile:

# ant configuration
export ANT_HOME=$HOME/work/env/apache-ant-1.9.4
export PATH=$PATH:$ANT_HOME/bin

2. CLI 構建應用

 

  配置完畢所有先決環境後,就可以開始構建我們的 Android 項目了。

 

2.1. 更新 Android Targets

 

  新安裝的 Android SDK 沒有附帶 Android Target,你要做的第一件事就是下載最新的 Android Targets。

 

  查看當前已安裝 Android Targets:

$ android list target

 

  你會使用該命令來查看是否安裝了某個 Android Target,也會用它來查看 Target ID,這個 ID 會在稍後構建時用到。

 

  下載並安裝 Android Targets[5]

$ android update sdk --no-ui

 

  安裝過程中會詢問你是否接受相關許可。另外初次更新耗時較長,而且很難一次性更新所有的資源,你需要多次反復執行該命令直到你擁有最新最全的 Android Targets。

 

2.2. 構建項目

 

2.2.1. 准備項目

 

  你可以新建一個項目,或者直接從你的代碼管理系統中簽出項目代碼,然後進入項目根目錄。

 

  如果你的項目之前一直使用 Eclipse 開發,那麼在你項目根目錄中可能沒有 build.xml 這個文件,該文件是 Ant 構建配置文件,我們需要使用這個文件來調用 Ant 進行自動構建,你不必自己動手來寫這個文件,如果你的項目是使用 Android SDK 提供的 android 工具創建的,那麼它會自動生成在你項目根目錄中。如果它不存在,我們只需要使用 android 工具更新一下項目就可以重新創建它。

$ android update project -p .

 

  android update project 命令可用選項包括

  1. Options:  
  2.   -l --library    : Directory of an Android library to add, relative to this  
  3.                     project's directory.  
  4.   -p --path       : The project's directory. [required]  
  5.   -n --name       : Project name.  
  6.   -t --target     : Target ID to set for the project.  
  7.   -s --subprojects: Also updates any projects in sub-folders, such as test  
  8.                     projects. 

  其中只有 -p 是必選。

 

2.2.2. 使用 Ant 構建項目

 

  有了 build.xml 以後,就可以使用 Ant 來構建整個項目,Android SDK 提供的 Ant 命令點擊查看全部 Ant 命令最主要的有:

    ● ant clean:清理項目中冗余輸出項。

    ● ant debug:調試模式構建。

    ● ant release:發行模式構建。

 

調試模式構建

 

  在項目根目錄下直接執行以下命令:

$ ant debug

 

  構建完畢後,在項目根目錄下的 bin 目錄中你可以找到 <project-name>-debug.apk,你可以將它安裝到安卓設備上進行調試。

 

發行模式構建

 

  在項目根目錄下直接執行以下命令:

$ ant release

 

  構建過程中會要求你輸入簽名用的 keystore 文件和密碼,構建完畢後,你可以在 bin 目錄找到 <project-name>-release.apk,你可以將該文件上傳到安卓應用商店公開發行。

 

  如果想要整個構建過程實現無人值守的自動化效果,你需要解決構建過程中輸入問題,以下是兩個解決方法。

 

  方法一:在項目根目錄下創建 ant.properties 文件,添加以下內容:

  1. # You can also use it define how the release builds are signed by declaring  
  2. # the following properties:  
  3. #  'key.store' for the location of your keystore and  
  4. #  'key.alias' for the name of the key to use.  
  5. # The password will be asked during the build when you use the 'release' target.  
  6.  
  7. key.store=<你的 keystore 文件路徑> 
  8. key.alias=<你的 keystore 別名> 
  9. key.store.password=<你的 keystore 文件密碼> 
  10. key.alias.password=<你的 keystore 別名密碼> 

 

 方法二:在命令行使用 -D 選項動態傳入相關參數:

$ ant release -Dkey.store=keystore -Dkey.alias=alias -Dkey.store.password=passwd -Dkey.alias.password=passwd

 

  如果你還沒有一個 keystore 文件,你可以使用 JDK 提供的 keytool 工具創建一個:

$ keytool -genkey -v -keystore <App-Name>.keystore -alias <Alias Name> -keyalg RSA -keysize 2048 -validity 10000

 

  命令詳解:

  -genkey 或 -genkeypair:生成 keystore。

  -v:打印相關信息。

  -keystore:keystore 文件名。

  -alias:設置別名。

  -keyalg:密鑰算法(一般使用 RSA 算法)。

  -keysize:密鑰長度(按位計算)。

  -validity:有效期(按天)。

 

其他構建選項

 

  如果不想每次都進入項目根目錄進行構建,可以使用 Ant 的 -buildfile 選項。

$ ant release -buildfile <path-to-your-build.xml>

 

  如果想要將 .apk 輸出到其他目錄,編輯 ant.properties 文件添加:

# You can use this to override default values such as
#  'source.dir' for the location of your java source folder and
#  'out.dir' for the location of your output folder.
out.dir=<the destination path you want>

 

  或者

$ ant release -Dout.dir=<path>

 

  其他一些有用選項:

  -lib <path>:添加第三方 Java 包搜索路徑。

  -logfile <file> 或 -l <file>:日志輸出文件。

  -logger <classname>:記錄日志的類名。

  -propertyfile <name>:ant 屬性文件。

  

    

(完)


 

注:

[1] 必須安裝 JDK 而不是 JRE,因為 JRE 只提供 JAVA 運行環境,但我們要用到一些由 JDK 提供的工具。

[2] 如果你安裝過程出現以下問題,可是按照給出的方法解決:

  錯誤提示:

  1. ...  
  2. Error Downloading Packages:  
  3.   libXfont-1.4.5-2.el6.i686: failure: Packages/libXfont-1.4.5-2.el6.i686.rpm from RHEL6.4: [Errno 256] No more mirrors to try.  
  4.   libfontenc-1.0.5-2.el6.i686: failure: Packages/libfontenc-1.0.5-2.el6.i686.rpm from RHEL6.4: [Errno 256] No more mirrors to try.  
  5. ... 

  解決方法是新建一個遠程倉庫連接:

# vi /etc/yum.repos.d/public-yum-el5.repo

  

  粘貼以下內容:

  1. [el5_latest]  
  2. name=Oracle Linux $releasever Latest ($basearch)  
  3. baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/latest/$basearch/  
  4. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  5. gpgcheck=1 
  6. enabled=1 
  7.  
  8. [el5_ga_base]  
  9. name=Oracle Linux $releasever GA installation media copy ($basearch)  
  10. baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/0/base/$basearch/  
  11. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  12. gpgcheck=1 
  13. enabled=0 
  14.  
  15. [el5_u1_base]  
  16. name=Enterprise Linux $releasever Update 1 installation media copy ($basearch)  
  17. baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/1/base/$basearch/  
  18. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  19. gpgcheck=1 
  20. enabled=0 
  21.  
  22. [el5_u2_base]  
  23. name=Enterprise Linux $releasever Update 2 installation media copy ($basearch)  
  24. baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/2/base/$basearch/  
  25. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  26. gpgcheck=1 
  27. enabled=0 
  28.  
  29. [el5_u3_base]  
  30. name=Enterprise Linux $releasever Update 3 installation media copy ($basearch)  
  31. baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/3/base/$basearch/  
  32. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  33. gpgcheck=1 
  34. enabled=0 
  35.  
  36. [el5_u4_base]  
  37. name=Enterprise Linux $releasever Update 4 installation media copy ($basearch)  
  38. baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/4/base/$basearch/  
  39. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  40. gpgcheck=1 
  41. enabled=0 
  42.  
  43. [el5_u5_base]  
  44. name=Enterprise Linux $releasever Update 5 installation media copy ($basearch)  
  45. baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/5/base/$basearch/  
  46. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  47. gpgcheck=1 
  48. enabled=0 
  49.  
  50. [ol5_u5_base]  
  51. name=Oracle Linux $releasever Update 5 installation media copy ($basearch)  
  52. baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/5/base/x86_64/  
  53. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  54. gpgcheck=1 
  55. enabled=0 
  56.  
  57. [ol5_u6_base]  
  58. name=Oracle Linux $releasever Update 6 installation media copy ($basearch)  
  59. baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/6/base/$basearch/  
  60. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  61. gpgcheck=1 
  62. enabled=0 
  63.  
  64. [ol5_u7_base]  
  65. name=Oracle Linux $releasever Update 7 installation media copy ($basearch)  
  66. baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/7/base/$basearch/  
  67. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  68. gpgcheck=1 
  69. enabled=0 
  70.  
  71. [ol5_u8_base]  
  72. name=Oracle Linux $releasever Update 8 installation media copy ($basearch)  
  73. baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/8/base/$basearch/  
  74. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  75. gpgcheck=1 
  76. enabled=0 
  77.  
  78. [el5_addons]  
  79. name=Enterprise Linux $releasever Add ons ($basearch)   
  80. baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/addons/$basearch/  
  81. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  82. gpgcheck=1 
  83. enabled=0 
  84.  
  85. [el5_oracle_addons]  
  86. name=Oracle Software addons for Enterprise Linux $releasever ($basearch)  
  87. baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/oracle_addons/$basearch/  
  88. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  89. gpgcheck=1 
  90. enabled=0 
  91.  
  92. [ol5_UEK_latest]  
  93. name=Latest Unbreakable Enterprise Kernel for Oracle Linux $releasever ($basearch)  
  94. baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/UEK/latest/$basearch/  
  95. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  96. gpgcheck=1 
  97. enabled=0 
  98.  
  99. [ol5_UEK_base]  
  100. name=Unbreakable Enterprise Kernel for Oracle Linux $releasever ($basearch)  
  101. baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/UEK/base/$basearch/  
  102. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  103. gpgcheck=1 
  104. enabled=0 
  105.  
  106. [el5_unsupported]  
  107. name=Productivity Applications for Enterprise Linux $releasever ($basearch)  
  108. baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/unsupported/$basearch/  
  109. gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5  
  110. gpgcheck=1 
  111. enabled=0 

 然後更新倉庫並安裝 JDK 需要的依賴包:

# yum install freetype-devel
# yum install xorg-x11-proto-devel

 

  在隨後我還遇到幾次錯誤提示,都是由於缺少依賴包資源導致。為此只能手動安裝所需依賴包,例如:

# cd ~/downloads
# wget ftp://mirror.symnds.com/distributions/CentOS-vault/6.1/os/x86_64/Packages/libfontenc-1.0.5-2.el6.i686.rpm
...

# yum install libfontenc-1.0.5-2.el6.i686.rpm

 

  我還用到的依賴包包括:libfontenc-devel-1.0.5-2.el6.i686.rpm, libXfont-1.4.5-2.el6.i686.rpm, libXfont-devel-1.4.5-2.el6.i686.rpm。

 

  最後再次安裝 JDK:

# yum install java-1.7.0-openjdk-devel

  

[3] 我使用的是 android-sdk_r23.0.2-linux.tgz,這個版本 Android SDK 要求 Ant 1.8 版本或以上,但我使用 yum 安裝只能達到 Ant 1.7 版本,因此只能手動安裝最新版本的 Ant 1.9.4。

 

$ cd ~/downloads
$ wget "http://mirror.symnds.com/software/Apache//ant/binaries/apache-ant-1.9.4-bin.tar.gz"
$ tar zxvf apache-ant-1.9.4-bin.tar.gz -C ~/work/env

 

 

[4] 如果在 Ubuntu 中,你需要安裝 ant-optional:$ sudo apt-get install ant-optional。 

[5] $ android update sdk 命令用來更新當前的 sdk,直接運行該命令會導致以下異常:

 

...
Exception in thread "main" org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]
...

 

  

  這是因為它默認啟動一個 GUI 界面來更新 SDK 資源,如果你使用 Eclipse + ADT 進行開發,在命令運行該命令就會調出 Android SDK Manager 窗口。在 CLI 界面下我們需要使用 ---no-ui 選項:$ android update sdk --no-ui

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved