命令列開發、編譯、打包Android應用程式

來源:互聯網
上載者:User

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

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

 

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

 

1:建立Android應用程式

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

D:\Android>android --helpUsage:  android [global options] action [action options]Global options:  -v --verbose  Verbose mode: errors, warnings and informational messages are printed.  -h --help     Help on a specific command.  -s --silent   Silent mode: only errors are printed out.Valid actions are composed of a verb and an optional direct object:-   list               : Lists existing targets or virtual devices.-   list avd           : Lists existing Android Virtual Devices.-   list target        : Lists existing targets.- create avd           : Creates a new Android Virtual Device.-   move avd           : Moves or renames an Android Virtual Device.- delete avd           : Deletes an Android Virtual Device.- update avd           : Updates an Android Virtual Device to match the foldersof a new SDK.- create project       : Creates a new Android project.- update project       : Updates an Android project (must already have an AndroidManifest.xml).- create test-project  : Creates a new Android project for a test package.- update test-project  : Updates the Android project for a test package (must already have an AndroidManifest.xml).- create lib-project   : Creates a new Android library project.- update lib-project   : Updates an Android library project (must already have an AndroidManifest.xml).- update adb           : Updates adb to support the USB devices declared in theSDK add-ons.- update sdk           : Updates the SDK by suggesting new platforms to installif available.

 

--create project子命令的用法如下:

Action "create project":Creates a new Android project.Options:-n --name     應用程式的名字-t --target   SDK Target ID-p --path     應用程式的工作目錄-k --package  應用程式的包名-a --activity 預設建立的Activity的名字

 

瞭解了相關命令及其用法,現在就可以用之來建立應用程式:在D:\Android工作目錄下建立LBSDemo程式

命令自動建立了如下內容:

 

2:編譯Android應用程式

 

A:產生R.java檔案

Android程式碼中會大量地引用各類資源檔,這些資源檔不是通過手動進行引用的,AndroidSDK提供了一個R.java類來進行資源的管理,方便程式員對資源檔的引用及管理,所以如果要讓程式編譯通過,首先就需要產生R.java類。

 

編譯R.java類需要用到AndroidSDK提供的aapt工具,aapt參數眾多,以下是主要參數:

  -d  one or more device assets to include, separated by commas  -f  force overwrite of existing files  -g  specify a pixel tolerance to force images to grayscale, default 0  -j  specify a jar or zip file containing classes to include  -k  junk path of file(s) added  -m  make package directories under location specified by -J  -u  update existing packages (add new, replace older, remove deleted files)  -v  verbose output  -x  create extending (non-application) resource IDs  -z  require localization of resource attributes marked with      localization="suggested"  -A  additional directory in which to find raw asset files  -G  A file to output proguard options into.  -F  specify the apk file to output  -I  add an existing package to base include set  -J  specify where to output R.java resource constant definitions  -M  specify full path to AndroidManifest.xml to include in zip  -P  specify where to output public resource definitions  -S  directory in which to find resources.  Multiple directories will be scannd

 

aapt編譯R.java檔案具體如下:

需要進入LBSDemo應用程式目錄,建立一個gen目錄,沒有gen目錄,命令將會出現找不到檔案的錯誤!

命令成功執行後將會在gen目錄下產生成包結構的分類樹,及R.java檔案!

 

參數說明

-f -m -J gen :以覆蓋的形式在gen目錄下產生帶包路徑的R.java-S res:指定資源檔-I E:\Android\SDK\android-sdk_r09-windows\platforms\android-7\android.jar:使用指定版本的android jar包-M AndroidManifest.xml:指定程式的設定檔 
 

B:根據.aidl定義檔案產生java檔案 

將.aidl檔案產生.java檔案需要用到AndroidSDK內建的aidl工具,此工具具體參數如下:

   -I<DIR>    search path for import statements.   -d<FILE>   generate dependency file.   -p<FILE>   file created by --preprocess to import.   -o<FOLDER> base output folder for generated files.   -b         fail when trying to compile a parcelable.
值得注意的是:這個工具的參數與參數值之間不能有空格,Google也有對工資不滿意的工程師!

 

 

C:用JAVASDK提供的javac命令工具將.java源檔案編譯為.class檔案

javac命令用法如下:

其中,可能的選項包括:  -g                         產生所有調試資訊  -g:none                    不產生任何調試資訊  -g:{lines,vars,source}     只產生某些調試資訊  -nowarn                    不產生任何警告  -verbose                   輸出有關編譯器正在執行的操作的訊息  -deprecation               輸出使用已淘汰的 API 的源位置  -classpath <路徑>            指定尋找使用者類檔案和注釋處理常式的位置  -cp <路徑>                   指定尋找使用者類檔案和注釋處理常式的位置  -sourcepath <路徑>           指定尋找輸入源檔案的位置  -bootclasspath <路徑>        覆蓋引導類檔案的位置  -extdirs <目錄>              覆蓋安裝的擴充目錄的位置  -endorseddirs <目錄>         覆蓋簽名的標準路徑的位置  -proc:{none,only}          控制是否執行注釋處理和/或編譯。  -processor <class1>[,<class2>,<class3>...]要啟動並執行注釋處理常式的名稱;繞過預設的搜尋進程  -processorpath <路徑>        指定尋找注釋處理常式的位置  -d <目錄>                    指定存放產生的類檔案的位置  -s <目錄>                    指定存放產生的源檔案的位置  -implicit:{none,class}     指定是否為隱式引用檔案產生類檔案  -encoding <編碼>             指定源檔案使用的字元編碼  -source <版本>               提供與指定版本的源相容性  -target <版本>               產生特定 VM 版本的類檔案  -version                   版本資訊  -help                      輸出標準選項的提要  -Akey[=value]              傳遞給注釋處理常式的選項  -X                         輸出非標準選項的提要  -J<標誌>                     直接將 <標誌> 傳遞給運行時系統
 

具體如下[因為需要編譯的.java檔案分布在不同的檔案夾下,故寫了多個*.java檔案路徑.引用了第三方Jar包,故要將jar包指定入classpath]:

 

 

D:使用Android SDK提供的dx.bat命令列指令碼產生classes.dex檔案

將工程bin目錄下的class檔案編譯成classes.dex,Android虛擬機器只能執行dex檔案!

命令產生的.dex檔案如下

 

 

E:使用Android SDK提供的aapt.exe產生資源套件檔案(包括res、assets、androidmanifest.xml等):

aapt用法參考上面!

命令產生的.ap_檔案如下:

 

 

 

 

F:利用AndroidSDK提供的apkbuilder工具產生未簽名的APK檔案

重要參數如下:

    -v      Verbose.    -d      Debug Mode: Includes debug files in the APK file.    -u      Creates an unsigned package.    -storetype Forces the KeyStore type. If ommited the default is used.    -z      Followed by the path to a zip archive.            Adds the content of the application package.    -f      Followed by the path to a file.            Adds the file to the application package.    -rf     Followed by the path to a source folder.            Adds the java resources found in that folder to the application            package, while keeping their path relative to the source folder.    -rj     Followed by the path to a jar file or a folder containing            jar files.            Adds the java resources found in the jar file(s) to the application            package.    -nf     Followed by the root folder containing native libraries to            include in the application package.

注:1,如果需要將so檔案打包進apk,一定要加上-nf參數

  2,如果第三方jar包裡含有圖片資源,一定要加上-rj參數,不然jar包裡資源檔解不出來,程式會因為無法引用資源而報錯!

命令產生的.apk檔案

 

 

H:利用JAVASDK提供的keytools工具產生認證檔案!

上面只是產生了一個沒有認證的apk檔案,Android是不會去安裝一個沒有數位憑證簽名的apk包的,所以需要安裝apk的話,必須用一個數位憑證對其簽名後,才可!

此處輸入命令後,此命令會與使用者產生互動,如果你不想產生互動的情況,那麼就要提前把命令想問的都告訴它!

 

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檔案如下:

 

 

I:最後一步,通過jarsigner命令用認證檔案對未簽名的APK檔案進行簽名

重要參數如下:

[-keystore <url>]           密鑰庫位置[-storepass <口令>]         用於密鑰庫完整性的口令[-storetype <類型>]         密鑰庫類型[-keypass <口令>]           專用密鑰的口令(如果不同)[-sigfile <檔案>]           .SF/.DSA 檔案的名稱[-signedjar <檔案>]         已簽名的 JAR 檔案的名稱[-digestalg <演算法>]    摘要演算法的名稱[-sigalg <演算法>]       簽名演算法的名稱[-verify]                   驗證已簽名的 JAR 檔案[-verbose]                  簽名/驗證時輸出詳細資料[-certs]                    輸出詳細資料和驗證時顯示認證[-tsa <url>]                時間戳記機構的位置[-tsacert <別名>]           時間戳記機構的公用密鑰認證[-altsigner <類>]           替代的簽名機制的類名[-altsignerpath <路徑列表>] 替代的簽名機制的位置[-internalsf]               在簽名塊內包含 .SF 檔案[-sectionsonly]             不計算整個清單的散列[-protected]                密鑰庫已保護驗證路徑[-providerName <名稱>]      提供者名稱[-providerClass <類>        Data Encryption Service提供者的名稱  [-providerArg <參數>]] ... 主類檔案和建構函式參數

 

具體用法如下:

 

大功告成,終於完成了!

 

總結:

通過對這些命令的運用,你才能清楚地知道程式開發、編譯、打包的每一個細節、才知道Eclipse是如何工作的、就算換了一個整合開發工具、也能很快得心應手!甚至能開發一套與Eclipse裡打包一樣功能的工具呢!下面的就是本人對上面命令的一個總結!如果公司需要,你也可以動手寫一個!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.