命令行開發、編譯、打包Android應用程序

Android SDK提供了一系列命令行工具,用來進行Android應用的開發、調試、打包等工作!Eclipse能夠進行Android應用開發的相關工作,也是調用了這些工具而已.

只有掌握了命令下的工作方式,工作起來纔會更加的得心應手.下面就拋開Eclipse集成開發工具,徒手走一遍Android開發、編譯、打包的流程!

注:本文只作參考之用,因爲LBSDemo工程中有本人自己加入的代碼,有第三方jar包,so文件等等!故一步一步按照本文操作是行不通的!


1:創建Android應用程序

Android SDK提供了一個android.bat批處理工具,它可以用來處理以下工作,這裏只介紹它的子命令create project來進行程序的創建.


  1. D:\Android>android --help
  2. Usage:
  3.   android [global options] action [action options]

  4. Global options:
  5.   -v --verbose  Verbose mode: errors, warnings and informational messages are pr
  6. inted.
  7.   -h --help     Help on a specific command.
  8.   -s --silent   Silent mode: only errors are printed out.

  9. Valid actions are composed of a verb and an optional direct object:
  10. -   list               : Lists existing targets or virtual devices.
  11. -   list avd           : Lists existing Android Virtual Devices.
  12. -   list target        : Lists existing targets.
  13. - create avd           : Creates a new Android Virtual Device.
  14. -   move avd           : Moves or renames an Android Virtual Device.
  15. - delete avd           : Deletes an Android Virtual Device.
  16. - update avd           : Updates an Android Virtual Device to match the folders
  17. of a new SDK.
  18. - create project       : Creates a new Android project.
  19. - update project       : Updates an Android project (must already have an Androi
  20. dManifest.xml).
  21. - create test-project  : Creates a new Android project for a test package.
  22. - update test-project  : Updates the Android project for a test package (must al
  23. ready have an AndroidManifest.xml).
  24. - create lib-project   : Creates a new Android library project.
  25. - update lib-project   : Updates an Android library project (must already have a
  26. n AndroidManifest.xml).
  27. - update adb           : Updates adb to support the USB devices declared in the
  28. SDK add-ons.
  29. - update sdk           : Updates the SDK by suggesting new platforms to install
  30. if available.
複製代碼
--create project子命令的用法如下:

  1. Action "create project":
  2. Creates a new Android project.
  3. Options:
  4. -n --name     應用程序的名字
  5. -t --target   SDK Target ID
  6. -p --path     應用程序的工作目錄
  7. -k --package  應用程序的包名
  8. -a --activity 默認創建的Activity的名字
複製代碼
瞭解了相關命令及其用法,現在就可以用之來創建應用程序:在D:\Android工作目錄下創建LBSDemo程序 1.png 命令自動創建瞭如下內容:
2.png 
2:編譯Android應用程序 A:生成R.java文件Android程序代碼中會大量地引用各類資源文件,這些資源文件不是通過手動進行引用的,AndroidSDK提供了一個R.java類來進行資源的管理,方便程序員對資源文件的引用及管理,所以如果要讓程序編譯通過,首先就需要生成R.java類。 編譯R.java類需要用到AndroidSDK提供的aapt工具,aapt參數衆多,以下是主要參數:
  1. -d  one or more device assets to include, separated by commas
  2.   -f  force overwrite of existing files
  3.   -g  specify a pixel tolerance to force images to grayscale, default 0
  4.   -j  specify a jar or zip file containing classes to include
  5.   -k  junk path of file(s) added
  6.   -m  make package directories under location specified by -J
  7.   -u  update existing packages (add new, replace older, remove deleted files)
  8.   -v  verbose output
  9.   -x  create extending (non-application) resource IDs
  10.   -z  require localization of resource attributes marked with
  11.       localization="suggested"
  12.   -A  additional directory in which to find raw asset files
  13.   -G  A file to output proguard options into.
  14.   -F  specify the apk file to output
  15.   -I  add an existing package to base include set
  16.   -J  specify where to output R.java resource constant definitions
  17.   -M  specify full path to AndroidManifest.xml to include in zip
  18.   -P  specify where to output public resource definitions
  19.   -S  directory in which to find resources.  Multiple directories will be scann
  20. d
複製代碼
aapt編譯R.java文件具體如下:需要進入LBSDemo應用程序目錄,新建一個gen目錄,沒有gen目錄,命令將會出現找不到文件的錯誤!命令成功執行後將會在gen目錄下生成成包結構的目錄樹,及R.java文件!
3.png 
參數說明
  1. -f -m -J gen :以覆蓋的形式在gen目錄下生成帶包路徑的R.java

  2. -S res:指定資源文件

  3. -I E:\Android\SDK\android-sdk_r09-windows\platforms\android-7\android.jar:使用指定版本的android jar包

  4. -M AndroidManifest.xml:指定程序的配置文件
複製代碼
B:根據.aidl定義文件生成java文件 將.aidl文件生成.java文件需要用到AndroidSDK自帶的aidl工具,此工具具體參數如下:
  1. -I<DIR>    search path for import statements.
  2. -d<FILE>   generate dependency file.
  3. -p<FILE>   file created by --preprocess to import.
  4. -o<FOLDER> base output folder for generated files.
  5. -b         fail when trying to compile a parcelable.
複製代碼
值得注意的是:這個工具的參數與參數值之間不能有空格,Google也有對工資不滿意的工程師!   4.png 
C:用JAVASDK提供的javac命令工具將.java源文件編譯爲.class文件javac命令用法如下:
  1. 其中,可能的選項包括:
  2.   -g                         生成所有調試信息
  3.   -g:none                    不生成任何調試信息
  4.   -g:{lines,vars,source}     只生成某些調試信息
  5.   -nowarn                    不生成任何警告
  6.   -verbose                   輸出有關編譯器正在執行的操作的消息
  7.   -deprecation               輸出使用已過時的 API 的源位置
  8.   -classpath <路徑>            指定查找用戶類文件和註釋處理程序的位置
  9.   -cp <路徑>                   指定查找用戶類文件和註釋處理程序的位置
  10.   -sourcepath <路徑>           指定查找輸入源文件的位置
  11.   -bootclasspath <路徑>        覆蓋引導類文件的位置
  12.   -extdirs <目錄>              覆蓋安裝的擴展目錄的位置
  13.   -endorseddirs <目錄>         覆蓋簽名的標準路徑的位置
  14.   -proc:{none,only}          控制是否執行註釋處理和/或編譯。
  15.   -processor <class1>[,<class2>,<class3>...]要運行的註釋處理程序的名稱;繞過默認
  16. 的搜索進程
  17.   -processorpath <路徑>        指定查找註釋處理程序的位置
  18.   -d <目錄>                    指定存放生成的類文件的位置
  19.   -s <目錄>                    指定存放生成的源文件的位置
  20.   -implicit:{none,class}     指定是否爲隱式引用文件生成類文件
  21.   -encoding <編碼>             指定源文件使用的字符編碼
  22.   -source <版本>               提供與指定版本的源兼容性
  23.   -target <版本>               生成特定 VM 版本的類文件
  24.   -version                   版本信息
  25.   -help                      輸出標準選項的提要
  26.   -Akey[=value]              傳遞給註釋處理程序的選項
  27.   -X                         輸出非標準選項的提要
  28.   -J<標誌>                     直接將 <標誌> 傳遞給運行時系統
複製代碼
具體如下[因爲需要編譯的.java文件分佈在不同的文件夾下,故寫了多個*.java文件路徑.引用了第三方Jar包,故要將jar包指定入classpath]:
5.png   
D:使用Android SDK提供的dx.bat命令行腳本生成classes.dex文件將工程bin目錄下的class文件編譯成classes.dex,Android虛擬機只能執行dex文件!
6.png 
命令生成的.dex文件如下
7.png   
E:使用Android SDK提供的aapt.exe生成資源包文件(包括res、assets、androidmanifest.xml等):aapt用法參考上面!
8.png 
命令生成的.ap_文件如下:
9.png     
F:利用AndroidSDK提供的apkbuilder工具生成未簽名的APK文件重要參數如下:
  1. -v      Verbose.
  2. -d      Debug Mode: Includes debug files in the APK file.
  3. -u      Creates an unsigned package.
  4. -storetype Forces the KeyStore type. If ommited the default is used.

  5. -z      Followed by the path to a zip archive.
  6.         Adds the content of the application package.

  7. -f      Followed by the path to a file.
  8.         Adds the file to the application package.

  9. -rf     Followed by the path to a source folder.
  10.         Adds the java resources found in that folder to the application
  11.         package, while keeping their path relative to the source folder.

  12. -rj     Followed by the path to a jar file or a folder containing
  13.         jar files.
  14.         Adds the java resources found in the jar file(s) to the application
  15.         package.

  16. -nf     Followed by the root folder containing native libraries to
  17.         include in the application package.
複製代碼
注:1,如果需要將so文件打包進apk,一定要加上-nf參數  2,如果第三方jar包裏含有圖片資源,一定要加上-rj參數,不然jar包裏資源文件解不出來,程序會因爲無法引用資源而報錯! 10.png 11.png 
命令生成的.apk文件

12.png   
H:利用JAVASDK提供的keytools工具生成證書文件!上面只是生成了一個沒有證書的apk文件,Android是不會去安裝一個沒有數字證書籤名的apk包的,所以需要安裝apk的話,必須用一個數字證書對其簽名後,纔可! 13.png 


此處輸入命令後,此命令會與用戶產生交互,如果你不想產生交互的情況,那麼就要提前把命令想問的都告訴它! keytool -genkey -alias HelloWorld.keystore -keyalg RSA -validity 1000 -keystore HelloWorld.keystore -dname "CN=w,OU=w,O=localhost,L=w,ST=w,C=CN" -keypass 123456 -storepass 123456命令生成的.keystore文件如下:


14.png   


I:最後一步,通過jarsigner命令用證書文件對未簽名的APK文件進行簽名重要參數如下:
  1. [-keystore <url>]           密鑰庫位置

  2. [-storepass <口令>]         用於密鑰庫完整性的口令

  3. [-storetype <類型>]         密鑰庫類型

  4. [-keypass <口令>]           專用密鑰的口令(如果不同)

  5. [-sigfile <文件>]           .SF/.DSA 文件的名稱

  6. [-signedjar <文件>]         已簽名的 JAR 文件的名稱

  7. [-digestalg <算法>]    摘要算法的名稱

  8. [-sigalg <算法>]       簽名算法的名稱

  9. [-verify]                   驗證已簽名的 JAR 文件

  10. [-verbose]                  簽名/驗證時輸出詳細信息

  11. [-certs]                    輸出詳細信息和驗證時顯示證書

  12. [-tsa <url>]                時間戳機構的位置

  13. [-tsacert <別名>]           時間戳機構的公共密鑰證書

  14. [-altsigner <類>]           替代的簽名機制的類名

  15. [-altsignerpath <路徑列表>] 替代的簽名機制的位置

  16. [-internalsf]               在簽名塊內包含 .SF 文件

  17. [-sectionsonly]             不計算整個清單的散列

  18. [-protected]                密鑰庫已保護驗證路徑

  19. [-providerName <名稱>]      提供者名稱

  20. [-providerClass <類>        加密服務提供者的名稱
  21.   [-providerArg <參數>]] ... 主類文件和構造函數參數
複製代碼
具體用法如下:
15.png 16.png 


大功告成,終於完成了!
17.png 


總結:通過對這些命令的運用,你才能清楚地知道程序開發、編譯、打包的每一個細節、才知道Eclipse是如何工作的、就算換了一個集成開發工具、也能很快得心應手!甚至能開發一套與Eclipse裏打包一樣功能的工具呢!下面的就是本人對上面命令的一個總結!如果公司需要,你也可以動手寫一個!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章