當前位置:首頁 » 編程軟體 » ant編譯apk

ant編譯apk

發布時間: 2022-10-24 15:16:23

㈠ cocos2dx在windows下開發怎麼編譯成apk

下面一段是網路的說明:
Cocos2d-x 是一個支持多平台的 2D 手機游戲引擎,使用 C++ 開發,基於OpenGL ES,基於Cocos2d-iphone,支持 WOPhone, iOS 4.1, Android 2.1 及更高版本, WindowsXP & Windows7,WindowsPhone 8.[1]Cocos2d-x是一個開源的移動2D游戲框架,MIT許可證下發布的。這是一個C++ Cocos2d-iPhone項目的版本。Cocos2d-X發展的重點是圍繞Cocos2d跨平台。Cocos2d-x提供的框架外,手機游戲,可以寫 在C++或者Lua中,使用API是Cocos2d-iPhone完全兼容。Cocos2d-x[2]項目可以很容易地建立和運行iOS,Android 的三星Bada,黑莓Blackberry操作系統和更多。Cocos2d-x還支持Windows、Mac和Linux等桌面操作系統,因此,我們可以 編寫的源代碼很容易在桌面操作系統中編輯和調試。

總的來說,cocos2dx的android交叉編譯環境還是蠻麻煩的。下面內容就是我一步一步實現的過程。
第一部分 安裝
一、Cygwin安裝
這個安裝比較簡單,網上也有大把的例子,這里我只是簡述一下。
首先去官網www.cygwin.com下載安裝,安裝包分32位和64位兩種.視情況選擇了。因為只是編譯,這里選擇的是32位版本。
下載地址:http://cygwin.com/setup-x86.exe
然後默認安裝,在安裝源的時候,選擇
http://mirrors.sohu.com/cygwin 或 http://mirrors.163.com/cygwin ,哪個好用,就哪個。
安裝的時候,把開發包都選上就可以了。
我這里是把cygwin安裝在c:\cygwin目錄下面了。
註:這里默認的vi不是我們常用的vim,使用起來會很不習慣,你可以根據實際情況下載,在安裝的時候,選擇編輯器的vim,然後就可以用了。如果沒有vim,你用的時候在vi命令行輸入set nocp,就可以正常習慣使用了。
二、 adt-bundle安裝
現在adt-bundle都集成了下面的功能,這樣就不用再去配置eclipse插件了。
l Eclipse + ADT plugin
l Android SDK Tools
l Android Platform-tools
l The latest Android platform
l The latest Android system image for the emulator
下載地址:
Adt-bundle也同樣分32位和64位的,在這里照樣下載32位的版本
http://dl.google.com/android/adt/adt-bundle-windows-x86-20131030.zip。64位的地址我也加上http://dl.google.com/android/adt/adt-bundle-windows-x86_64-20131030.zip
下載完成後,解壓就可以使用。我這里是解壓到e:\adt-bundle
裡面有eclipse,sdk兩個目錄和一個SDK Manager管理軟體。運行SDK Manager可以下載你需要的SDK版本。
注意:你下載的java也要對應的32位和64位的環境,否則eclipse將會啟動不了。牢騷一句,oracle把java和mysql並入後,真是開源的最大悲劇。你去下載它,就明白了。祝願oracle早點倒閉。
三、ndk安裝
下載地址:
32位下載地址
http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86-legacy-toolchains.zip
http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86.zip
64位下載地址
http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86_64-legacy-toolchains.zip
http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86_64.zip
然後解壓就可以了,我這里解壓到
E:\android-ndk-r9b
四、cocos2dx安裝
我這里下載的版本是cocos2dx v2.2。同時還有一個免費的編輯器CocoStudio,它提供了UI和動畫,資源編輯功能。可以不用mac下面那個收費的軟體了。
今天突然http://www.cocos2d-x.org/怎麼都下載不了,沒辦法,只好到https://github.com/cocos2d/cocos2d-x/這里下載了。找到對應的2.2版本。
Cocos2dx下載地址:
https://codeload.github.com/cocos2d/cocos2d-x/zip/cocos2d-x-2.2
Cocostudio下載地址:
http://d001.download.appget.cn/CocoStudio/DownLoad/v1.0.0.1/CocoStudio_Full_V1.0.0.1.exe
然後cocostudio默認安裝就可以了,我這里把cocos2dx解壓到e:/cocos2dx
五、python安裝
因為,cocos2dx創建工程,需要python,所以這里還需要下載python,去他的官網http://www.python.org/下載就可以了
下載地址:
http://www.python.org/ftp/python/2.7.5/python-2.7.5.msi 這個下載32位版本就可以了。然後默認安裝。我這里安裝到了C:\Python27
六、ant安裝
這個是一個將軟體編譯、測試、部署等步驟聯系在一起加以自動化的一個工具,大多用於Java環境中的軟體開發。這里在生成apk的時候,也用到了。所以也要下載安裝。
http://mirrors.cnnic.cn/apache//ant/binaries/apache-ant-1.9.2-bin.zip
解壓到c:\ant就可以了
到這里,所以需要的軟體,都已經下載,並安裝了。
第二部分:配置
第一步:新建環境變數
點windows的開始菜單-〉計算機 右鍵菜單選擇屬性,彈出屬性對話框。然後選擇高級系統設置,如下圖

然後選擇環境變數
增加
ANT_HOME=C:\ant
PYTHON_HOME=C:\Python27
JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_16
NDK_ROOT=E:\android-ndk-r9b
ANDROID_SDK=E:\adt-bundle\sdk
然後編輯環境變數path,追加 %JAVA_HOME%\bin;%ANT_HOME%\bin;%PYTHON_HOME%;%NDK_ROOT%;%ANDROID_SDK%\tools;%ANDROID_SDK%\platform-tools;
這樣,就可以在CMD窗口執行相關的命令了。
第三部分 cocos2dx的工程准備
第一步:增加android_update.bat
在ant生成apk的時候,會需要知道,你編譯的目標是什麼版本和src.dir等信息。創建這個工程,就是為了自動更新它。批處理的內容是
android update project -p . -t android-10
該文件建好後,命名為android_update.bat,放在E:\cocos2dx\template\multi-platform-cpp\proj.android
注意,請先確認你的ANDROID_SDK是否安裝了對就的版本,android-10是對應的是android2.3,其他的版本請用對應的數字。執行e:\adt-bundle\SDK Manager.exe,如下圖所示:

這里的數字是19
那麼批處理的內容改為
android update project -p . -t android-19
第二步:修改build_native.sh
該文件在E:\cocos2dx\template\multi-platform-cpp\proj.android目錄中,因為在執行build_native.sh的時候,會出現的許可權的問題,所以在這個腳本中,增加了許可權設置,來解決這個問題。
在第67行後面,也就是復制資源的後面增加下面一行
chmod 666 -R "$APP_ANDROID_ROOT"/assets就可以了。如下圖所示

第三步,創建工程復制批處理
在cocos2dx的2.2中,已經少了一些批處理來創建工程,現在全部改用python來創建工程。
現在到E:\cocos2dx\tools\project-creator下,創建一個批處理demo.bat,內容如下
python create_project.py -project %~n0% -package com.android.zdhsoft -language cpp
x ..\..\cocos2dx\platform\android\java\src\* ..\..\projects\%~n0%\proj.android\src /E
上面批處理的
第一行的意思是,建一個工程為%~n0%的工程,包名是com.android.zdhsoft,使用的語言是cpp。%~n0%在批處理表示的是 批處理的文件名,在demo.bat中,%~n0%的值是demo。使用該批處理的好處是,如果建議某一個工程,只有把批處理復制一個,然後重新命名就可 以了。如命名為sample.bat,執行後,就可以行到一個sample的cocos2dx工程。
創建的工程在E:\cocos2dx\projects目錄中。
第二行的意思,復制編譯andiroid工程需要的java文件。否則編譯的時候,會提示找不到對應的類。

㈡ 請教Android內置應用Browser編譯成APK的問題

在Eclipse創建一個Android工程,把android.webkit目錄下的Java代碼拷貝過來;
將/home/roger/a41/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/webkit下面的EventLogTags.java也拷貝到自己的工程;
因為android.webkit下的類會使用SDK中非公開的API,我們需要解決編譯錯誤:
/home/roger/a41/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
/home/roger/a41/out/target/common/obj/JAVA_LIBRARIES/core_intermediates/classes.jar
/home/roger/a41/out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/classes.jar
創建一個User Library,並且勾選System Library的選項;
加入以下Jar包:
在Java Build Path/Order and Export把創建的庫放在最前面;
因為在我們應用中的android.webkit包跟SDK中的重名,所以我們需要更改包名,可以改成android.webkit2;
我們需要重新編譯libchromium_net.so和libwebcore.so,並且使用另外的名字,並且把其代碼中使用的android/webkit/ JNI路徑改成android/webkit2/保證JNI的正確性:
在/home/roger/a41/external/chromium下面,把所有源文件的android/webkit/路徑改成android/webkit2/;
打開/home/roger/a41/external/chromium/Android.mk,修改庫名為libchromium_net2,並且加多一行「LOCAL_MODULE_TAGS := optional「,具體內容見後;
重新編譯chromium_net,得到libchromium_net2.so;
在/home/roger/a41/external/webkit/Source/WebKit/android下面,把所有源文件的android/webkit/路徑改成android/webkit2/;
打開/home/roger/a41/external/webkit/Android.mk,將庫名改成libwebcore2.so,並且加多一行「LOCAL_MODULE_TAGS := optional「(需要修改兩個地方,靜態庫編譯和動態庫編譯),另外還需要把導入庫libchromium_net改成libchromium_net2,具體內容見後;
重新編譯webcore,得到libwebcore2.so;
接下來我們可以把修改後的libwebcore2.so和libchromium_net2.so push到手機的rom裡面,假設路徑是/data/local(如果沒有寫許可權,用Root Explorer修改);
然後我們需要修改Java的代碼,讓它去載入我們自己的庫,修改的地方位於JniUtil.java和WebViewCore.java,具體內容見後(載入順序需要改變,先載入libchromium_net2.so再載入libwebcore2.so);
最後加上我們自己的Test Shell的代碼,運行就OK了,如果只修改了C++的代碼,重編譯後再Push到手機,然後重新運行Test Shell就可以馬上生效,Java的代碼可以在Eclipse裡面很方便的調試,C++的代碼理論上也可以通過GDB進行調試;

㈢ 用ant debug 生成android 的apk文件時候出現以下的錯誤,哪位大神知道啊!!

[aapt] invalid resource directory name: C:\Users\issuser\workspace\Amway\bin\res/crunch

E:\android-sdk\sdk\tools\ant\build.xml:698: null returned: 1

這一行出錯,資源不正確

㈣ 如何操作android證書文件實現簽章

Android系統要求,所有的程序經過數字簽名後才能安裝。Android系統使用這個證書來識別應用程序的作者,並且建立程序間的信任關系。證書不是用於用戶控制哪些程序可以安裝。證書不需要授權中心來簽名:Android應用程序上使用自己簽名的證書是完全允許且普遍的。
理解Android應用程序簽名有以下幾個重要點:
·所有的應用程序都必須簽名。系統不會安裝任何一個不簽名的程序。
·你可以使用自己的證書來簽名。不需要任何授權中心。
·當你要為最終用戶發布你的應用程序的時候,你必須簽入一個合適的密鑰。你不可以發布程序的時候還使用SDK工具簽入的DebugKey。
·系統只在安裝應用程序的時候檢測證書的有效期。如果應用程序在安裝之後證書失效了,那麼,應用程序還是可以正常工作。
·你可以使用標准工具——Keytool和Jarsigner——生成Key並簽名apk文件。
·一旦你為應用程序簽名了,一定要使用zipalign工具來優化最終的APK包。
Android系統不會安裝和運行沒有正確簽名的應用程序。這條規則適用於任何運行Android系統的地方,不管是真機還是模擬器。正是由於這個原因,你必須在模擬器或真機上運行/調試程序之前對程序進行簽名。
當你調試應用程序時,AndroidSDK工具替你對應用程序進行了簽名。Eclipse的ADT插件和Ant編譯工具都提供了兩種簽名模式——Debug模式和Release模式。
·當開發和測試時,你可以使用Debug模式。在Debug模式下,編譯工具使用內嵌在JDK中的Keytool工具來創建一個keystore和一個key(包含公認的名字和密碼)。在每次編譯的時候,使用這個DebugKey來為apk文件簽名。由於密碼是公認的,在每次編譯的時候,也不需要提示你輸入keystore和key密碼。
·當你的程序准備發布時,你必須在Release模式下,使用密鑰來為apk文件簽名。有以下兩種方式可以做到:
1.命令行中使用Keytool和Jarsigner。在這個方法中,首先需要編譯出一個未簽名的apk。然後使用Jarsigner(或相似的工具),用你的密鑰為apk手動簽名。如果你沒有合適的密鑰,你可以運行Keytool來手動生成自己的keystore/key。
2.使用ADT導出向導。如果你使用Eclipse/ADT插件進行開發,你可以使用導出向導來編譯程序,生成密鑰(如果需要),並為apk簽名,所有這些操作都在導出向導中。一旦你的程序簽名了,別忘了運行zipalign來為apk進行額外的優化。
簽名策略
應用程序簽名的某些方面可能會影響應用程序的開發,特別是你打算一起發布多個應用程序的時候。一般來說,推薦的策略是在整個應用程序壽命內,所有的程序簽上相同的證書。
以下有幾個應該這么做的原因:
·應用程序升級——當你對應用程序進行升級時,如果你想用戶平穩的升級,那麼,你就需要簽上相同的證書。當系統安裝一個升級應用程序時,如果新版本的證書與老版本的證書有匹配的話,那麼,系統才會允許進行升級。如果你沒有為版本簽上合適的證書,當你安裝時,你需要給應用程序指定一個新的包名——在這種情況下,用戶安裝的新版本,被當作是一個全新的應用程序。
·應用程序模塊化——如果應用程序請求的話,Android系統允許簽有相同證書的應用程序運行在相同的進程里,這樣,系統就會把它們看作是一個單一的應用程序。用這種方法配置應用程序,用戶可以選擇更新每個獨立的模塊。
·代碼/數據許可權共享——Android系統提供了基於簽名的許可權檢查,因此,如果應用程序間簽有特定的證書,那麼,它們之間可以共享功能。通過多個程序簽有相同的證書並且使用基於簽名的許可權檢查,你的程序可以以一種安全的方式共享代碼和數據。還有一個決定簽名策略的重要因素是:如何設定key的有效期。
·如果你計劃支持單個應用程序的升級,你需要確保你的key擁有一個超過期望的應用程序生命周期的有效期。推薦使用25年或更多的有效期。當你的key過期了,用戶也就不能平穩的更新到新版本了。
·如果你想給多個無關的應用程序簽上相同的key,那麼,你必須確保key的有效期超過所有應用程序所有版本的生命周期,包括將來有可能添加到這一陣營的程序。
·如果你想在AndroidMarket上發布你的程序,key的有效期必須在2033.10.22以後。Market伺服器強制這一要求,目前是保證用戶可以平穩的更新他們的程序。
當你設計應用程序時,一定要把這些點記在腦子里,並且使用一個合適的證書來為應用程序簽名。
簽名的基本設定
在你開始之前,你必須保證Keytool對SDK編譯工具來說是可利用的。多數情況下,你可以通過設置JAVA_HOME環境變數來告訴SDK編譯工具如何找到Keytool。另外,你還可以添加JDK中Keytool的路徑到PATH的變數里。
如果你在Linux上開發,並且使用GNU編譯器來編譯Java,那麼,請確保系統是使用JDK中的Keytool,而不是gcj。如果Keytool已經在你的PATH中,它有可能是對/usr/bin/keytool的符號鏈接。在這種情況下,檢查符號鏈接的目標,確保它是指向JDK中的Keytool。如果你打算對公眾釋放你的應用程序,你還需要Jarsigner工具。Jarsigner和Keytool都包含在JDK中。
Debug模式下簽名
Android編譯工具提供了Debug簽名模式,使得開發和調試應用程序更加容易,而且還滿足Android系統的簽名要求。當使用Debug模式編譯你的app時,SDK工具會調用Keytool工具自動創建一個Debug的keystore和key。然後,這個Debugkey會自動用於apk的簽名,這樣,你不需要使用你自己的key來為應用程序包簽名。
SDK工具使用預先定義好的名字/密碼來創建Debugkeystore/key:
·Keystore名字:「debug.keysotre」
·Keystore密碼:「android」
·Key別名:「androiddebugkey」
·Key密碼:「android」
·CN:「CN=AndroidDebug,O=Android,C=US」
如果需要的話,你可以改變Debugkeystore/key的位置和名字,或者提供一個自定義的Debugkeysotre/key。然而,任何自定義的Debugkeystore/key必須使用和默認Debugkey(上面描述的)相同的名字和密碼。(在Eclipse/ADT中,操作Windows>Preferences>Android>Build實現。)
注意:你不能將簽有Debug證書的應用程序發布給公眾。
Eclipse用戶
如果你在Eclipse/ADT下開發(並且已經按照上面描述的「簽名的基本設定」配置了Keytool),Debug模式下簽名默認是開啟的。當你運行或是調試應用程序時,ADT會使用Debug證書進行簽名,並運行zipalign,然後安裝到選擇的模擬器或是連接上的設備。整個過程不需要你參與,前提是ADT能訪問Keytool。
Ant用戶
如果你使用Ant來編譯你的apk文件,需要在ant命令中添加debug選項來開啟Debug簽名模式(假設你正在使用由android工具生成build.xml文件)。當你運行antdebug來編譯你的程序時,編譯腳本會生成一個keystore/key,並為apk進行簽名。然後腳本會使用zipalign工具對apk進行對齊處理。整個過程不需要你參與。閱讀「其它IDE下開發:Debug模式編譯」來了解更多的信息。
Debug證書過期
Debug模式下簽名用的證書(默認是Eclipse/ADT和Ant編譯)自從它創建之日起,1年後就會失效。
當證書失效時,你會得到一個編譯錯誤,在Ant編譯上,
錯誤如下:
debug:
[echo]Packagingbin/samples-debug.apk,andsigningitwithadebugkey...
[exec]DebugCertificateexpiredon8/4/083:43PM
在Eclipse/ADT中,Android控制台上你將會看到一個相似的錯誤。
為了解決這個問題,只需要刪掉debug.keystore文件即可。AVD默認存儲的位置在:~/.android/avd(OSX和Linux),C:DocumentsandSettings\.android(WindowsXP),C:Users\.android(WindowsVista)。
當下一次編譯的時候,編譯工具會重新生成一個新的keystore和Debugkey。
Release模式下簽名
當你的程序准備好釋放給其它用戶時,你必須:
1.獲取一個合適的密鑰
2.在Release模式下編譯程序
3.使用密鑰簽名程序
4.對齊APK包
如果你是使用Eclipse/ADT插件開發,你可以使用導出向導來完成編譯、簽名和對齊等操作。在整個過程中,導出向導甚至還可以生成一個新的keystore和密鑰。因此,如果你使用Eclipse,你可以直接跳到「使用EclipseADT編譯和簽名」。
獲取一個合適的密鑰為了進行程序的簽名,首先,你必須有一個合適的密鑰。密鑰指:
·個人持有。
·代表個人、公司或組織實體的身份。
·擁有一個有效期。有效期推薦超過25年。
如果你在AndroidMarket上發布你的程序,需要注意一點的是:程序的有效期需要在2033.10.22之後。你不能上傳一個應用程序,而它的key的有效期是在這個日期之前。
·不是由AndroidSDK工具生成的Debugkey。
如果你沒有一個合適的key,你一定要使用Keytool來生成一個。如「基本設定」中描述的,確保Keytool可用。
為了用Keytool生成一個key,使用keytool命令並傳入一些可選參數,如下表所示。
警告:確保密鑰的安全。一定要閱讀「安全儲存你的密鑰」中討論如何確保你的密鑰的安全以及這對你和用戶為何如此重要。尤其是,當你生成你的密鑰時,一定要為keystore和key使用強密碼。

㈤ 如何提取apk簽名key

如果不知道密碼就很難提取,如果有密碼 用JDK裡面的key tools工具可以提取

㈥ 如何將android原生應用改成ant方式編譯

android 程序打包成apk,如果在是命令行方式,一般都要經過如下步驟:
1.用aapt命令生成R.java文件
2.用aidl命令生成相應java文件
3.用javac命令編譯java源文件生成class文件
4.用dx.bat將class文件轉換成classes.dex文件
5.用aapt命令生成資源包文件resources.ap_
6.用apkbuilder.bat打包資源和classes.dex文件,生成unsigned.apk
7.用jarsinger命令對apk認證,生成signed.apk

eclipase手動打包生成apk方式,只不過是eclipase代替我們執行了以上命令而已。

eclipse用起來雖然方便,為什麼要使用Ant批量打包Android應用,對於我來說主要有以下兩方面考慮:
1、我們在發布App的時候,可能需要發送到十幾,甚至幾十個不同的分發渠道,比如360手機市場,網路,應用寶等等,我們可能需要對各個渠道的下載量,用戶存留和用戶使用情況等數據進行分析,比如使用網路移動統計,友盟統計等。為了實現統計功能,我們需要在配置文件中添加一個數據元,來標識我們的應用要發布到哪一個渠道上,因此,若使用傳統的方法,我們每發布一個渠道的版本,就需要修改清單文件中的數據元,然後再使用keystore進行簽名和打包。若只有一兩個分發渠道,工作量還是可以接受的,但是若我們的分發渠道打到幾十個的時候,我們如果再手動的進行修改然後簽名打包發布,那工作量就很可觀了。因此,為解決這種需求,我們採用Ant來實現對Android應用的自動打包。
2、我們做產品的時候,肯定需要經常打不同環境的包,比如開發環境,測試環境,生產環境,這個時候你怎麼辦,如果用傳統方法,你打開發環境包你要把你的服務端IP和圖片伺服器IP改成開發的,打包,然後打測試的包,你又要改成測試伺服器IP和圖片伺服器IP,這樣多麻煩,如果你把這服務端IP和圖片伺服器IP,配置到一個xml文件里,用ant打包方式實現自動替換,多方便。

㈦ 如何使用Ant腳本編譯出Jar和Apk包

首先我們來看看如何使用ant腳本打出一個jar包 我們新建一個工程AntExportJar 在工程的目錄下面新建一個build.xml,這個是ant腳本規定的一個入口腳本文件,文件名都是:build.xml [html] view plain ?
<?xml version ="1.0" encoding ="UTF-8" ?>
<project name ="AntExportJar" basedir ="." default ="exportJar" >
????<!--?設置全局變數?-->
????<property name ="src" value ="src" />
????<property name ="dist" value ="dist" />
????<property name ="app.name" value ="ant" />
????<property name ="app.version" value ="1.0" />
????<property name ="classes.encode" value ="GBK" />
????<property name ="lib" value ="libs" />

????<property
????????name ="project-dir"
????????value ="C:\Users\i\workspace\AntExportJar" />
????<property
????????name ="sdk-folder"
????????value ="C:\Users\i\AppData\Local\Android\sdk" />
????<property
????????name ="platform-folder"
????????value ="${sdk-folder}\platforms\android-22" />
????<property
????????name ="android-jar"
????????value ="${platform-folder}\android.jar" />
????<property
????????name ="src"
????????value ="${project-dir}\src" />
????<property
????????name ="bin"
????????value ="${project-dir}\bin" />
????<property
????????name ="libs"
????????value ="${project-dir}\lib" />

????<!--?task?-->
????<target name ="init" >
????????<echo>
????????????Initialize...
????????</echo>
????????<delete dir ="${bin}" />
????????<mkdir dir ="${bin}" />
????</target>

????<target name ="buildFiles" depends ="init" >
????????<javac
????????????????bootclasspath ="${android-jar}"
????????????????compiler ="javac1.7"
????????????????target ="1.7"
????????????????destdir ="${bin}"
????????????????encoding ="GBK"
????????????????includeAntRuntime ="true"
????????????????listfiles ="true" >
????????????????<src path ="${project-dir}" />
????????????????<classpath>
?????????????????????<!--?引用第三方jar包需要引用,用於輔助編譯,並沒有將jar打包進去。jar的打包在dex命令中。-->
?????????????????????<fileset dir ="${libs}" includes ="*.jar" />
????????????????</classpath>
????????</javac>
????</target>

????<!--?導出jar文件?-->
????<target name ="exportJar" depends ="buildFiles" >
????????<delete dir ="${dist}" />
????????<!--?Create?the?distribution?directory?-->
????????<mkdir dir ="${dist}" />
????????<!--?Put?everything?in?${classes}?into?the?MyProject-${DSTAMP}.jar?file?-->
????????<jar jarfile ="${dist}/${app.name}.jar" basedir ="${bin}" >
????????????<!--
????????????<fileset?dir="${libs}"?includes="**/*.jar"?/>
????????????-->
????????????<zipfileset excludes ="META-INF/*.SF" src ="${libs}/Bai_NativeAd_SDK.jar" />
????????????<zipfileset excludes ="META-INF/*.SF" src ="${libs}/gdt_mob_release.jar" />
????????</jar>
????</target>
</project>
腳本很簡單,下面我們就來分析一下: [html] view plain ?
<project name ="AntExportJar" basedir ="." default ="exportJar" >
最外圍的一個標簽是project,是一個工程標簽,有名字,還有就是工程的目錄baseDir,用點號:"." 接下來就是定義全局變數,或者是屬性值: [html] view plain ?
<!--?設置全局變數?-->
<property name ="src" value ="src" />
<property name ="dist" value ="dist" />
<property name ="app.name" value ="ant" />
<property name ="app.version" value ="1.0" />
<property name ="classes.encode" value ="GBK" />
<property name ="lib" value ="libs" />

<property
????name ="project-dir"
????value ="C:\Users\i\workspace\AntExportJar" />
<property
????name ="sdk-folder"
????value ="C:\Users\i\AppData\Local\Android\sdk" />
<property
????name ="platform-folder"
????value ="${sdk-folder}\platforms\android-22" />
<property
????name ="android-jar"
????value ="${platform-folder}\android.jar" />
<property
????name ="src"
????value ="${project-dir}\src" />
<property
????name ="bin"
????value ="${project-dir}\bin" />
<property
????name ="libs"
????value ="${project-dir}\lib" />
這樣我們在後面就可以使用:${name值} 來使用value值的定義了,所以這里就相當於定義了變數的作用,這里我們看到有一些value值是路徑,但是這里我們感覺有一個不好的地方,就是這些路徑是寫死的,那麼我們還可以怎麼做能讓他變得靈活呢?其實很簡單,ant腳本中是可以訪問環境變數的,那麼我們只要將這些路徑定義成環境變數就可以了: [html] view plain ?
<property environment ="env" />
<property name ="ANDROID_HOME" value ="${env.ANDROID_HOME}" />
第一行先申明一個環境變數值,這個env是公共的寫法,也是ant自帶的,他表示當前的環境變數的值,那麼後面就可以訪問具體的哪些環境變數了,比如這里我配置了ANDROID_HOME這個環境變數,那麼就可以用${env.ANDROID_HOME}來訪問androidsdk的目錄了,和上面的那個直接使用絕對路徑的方式是一樣的。 解析來就是定義task了,在ant中task也是最重要的,我們最終運行的都是task,就相當於Java中的main方法一樣。ant腳本中可以定義多個task,而且每個task可以有執行的先後順序的。相當於Java中的方法中調用其他方法一樣。 [html] view plain ?
<!--?task?-->
<target name ="init" >
????<echo>
????????Initialize...
????</echo>
????<delete dir ="${bin}" />
????<mkdir dir ="${bin}" />
</target>
首先這里定義了一個初始化的task,其中echo標簽也是很常用的,就是列印信息的,然後是刪除目錄${bin},這個bin變數在上面已經定義了,然後在創建${bin}目錄。 初始化完之後,開始執行編譯工作: [html] view plain ?
<target name ="buildFiles" depends ="init" >
????<javac
????????bootclasspath ="${android-jar}"
????????compiler ="javac1.7"
????????target ="1.7"
????????destdir ="${bin}"
????????encoding ="GBK"
????????includeAntRuntime ="true"
????????listfiles ="true" >
????????<src path ="${project-dir}" />
????????????<classpath>
????????????????<!--?引用第三方jar包需要引用,用於輔助編譯,並沒有將jar打包進去。jar的打包在dex命令中。-->
????????????????<fileset dir ="${libs}" includes ="*.jar" />
????????????</classpath>
????</javac>
</target>
這里在此定義一個buildFiles的task,depends的值是表示當前的task在這個depends的task執行完之後在執行,這里就是先執行init的task,然後在執行buildFiles的task,這里的task主要是編譯Java成class文件: bootclasspath:表示編譯依賴的系統庫,這里依賴的是android.jar compiler:表示編譯的java版本 target:表示編譯之後的class的版本,就是能夠運行的java版本 destDir:表示編譯之後的class文件的存放目錄 其他的就不說了,這里還有一個重點,也就是我們在編譯的時候會遇到的問題,就是我們在編譯的時候,會引用到第三發的jar,所以這里我們為了保證能夠編譯過,這里還必須用classpath標簽來引用這些jar,當然這里只是能夠保證編譯通過,並不會把這些jar也編譯到最終我們想要的jar中,這個問題我們後面再說。 下面在看最後的一個task,就是將編譯完之後的class文件打包成jar文件: [html] view plain ?
<!--?導出jar文件?-->
<target name ="exportJar" depends ="buildFiles" >
????<delete dir ="${dist}" />
????<!--?Create?the?distribution?directory?-->
????<mkdir dir ="${dist}" />
????<!--?Put?everything?in?${classes}?into?the?MyProject-${DSTAMP}.jar?file?-->
????<jar jarfile ="${dist}/${app.name}.jar" basedir ="${bin}" >
????????<!--
????????<fileset?dir="${libs}"?includes="**/*.jar"?/>
????????-->
????<zipfileset excludes ="META-INF/*.SF" src ="${libs}/Bai_NativeAd_SDK.jar" />
????<zipfileset excludes ="META-INF/*.SF" src ="${libs}/gdt_mob_release.jar" />
????</jar>
</target>
這里我們定義了一個exportJar的task,他是在buildFiles的task運行完之後在運行。 首先刪除目標目錄${dist},然後在創建一個目錄。這個目錄就是存放最後編譯好的jar文件的目錄 然後就是用jar標簽來導出jar文件了: jarfile:表示編譯完之後存放的jar文件名路徑 basedir:表示需要編譯jar的class文件目錄 其他就OK了,但是在實際中我們在編譯的過程中會引用到第三方的jar,那麼這時候我們把這些jar編譯到最終的jar中,說道這里,其實我們在使用Eclipse導出jar的時候,有一個插件可以做到這點:fat-jar,安裝完插件

㈧ 安卓APP在應用市場加固之後怎麼重新簽名

Android系統要求,所有的程序經過數字簽名後才能安裝。Android系統使用這個證書來識別應用程序的作者,並且建立程序間的信任關系。證書不是用於用戶控制哪些程序可以安裝。證書不需要授權中心來簽名:Android應用程序上使用自己簽名的證書是完全允許且普遍的。 理解Android應用程序簽名有以下幾個重要點: ·所有的應用程序都必須簽名。系統不會安裝任何一個不簽名的程序。 ·你可以使用自己的證書來簽名。不需要任何授權中心。 ·當你要為最終用戶發布你的應用程序的時候,你必須簽入一個合適的密鑰。你不可以發布程序的時候還使用SDK工具簽入的DebugKey。 ·系統只在安裝應用程序的時候檢測證書的有效期。如果應用程序在安裝之後證書失效了,那麼,應用程序還是可以正常工作。 ·你可以使用標准工具——Keytool和Jarsigner——生成Key並簽名apk文件。 ·一旦你為應用程序簽名了,一定要使用zipalign工具來優化最終的APK包。 Android系統不會安裝和運行沒有正確簽名的應用程序。這條規則適用於任何運行Android系統的地方,不管是真機還是模擬器。正是由於這個原因,你必須在模擬器或真機上運行/調試程序之前對程序進行簽名。 當你調試應用程序時,AndroidSDK工具替你對應用程序進行了簽名。Eclipse的ADT插件和Ant編譯工具都提供了兩種簽名模式——Debug模式和Release模式。 ·當開發和測試時,你可以使用Debug模式。在Debug模式下,編譯工具使用內嵌在JDK中的Keytool工具來創建一個keystore和一個key(包含公認的名字和密碼)。在每次編譯的時候,使用這個DebugKey來為apk文件簽名。由於密碼是公認的,在每次編譯的時候,也不需要提示你輸入keystore和key密碼。 ·當你的程序准備發布時,你必須在Release模式下,使用密鑰來為apk文件簽名。有以下兩種方式可以做到: 1.命令行中使用Keytool和Jarsigner。在這個方法中,首先需要編譯出一個未簽名的apk。然後使用Jarsigner(或相似的工具),用你的密鑰為apk手動簽名。如果你沒有合適的密鑰,你可以運行Keytool來手動生成自己的keystore/key。 2.使用ADT導出向導。如果你使用Eclipse/ADT插件進行開發,你可以使用導出向導來編譯程序,生成密鑰(如果需要),並為apk簽名,所有這些操作都在導出向導中。一旦你的程序簽名了,別忘了運行zipalign來為apk進行額外的優化。 簽名策略 應用程序簽名的某些方面可能會影響應用程序的開發,特別是你打算一起發布多個應用程序的時候。一般來說,推薦的策略是在整個應用程序壽命內,所有的程序簽上相同的證書。 以下有幾個應該這么做的原因: ·應用程序升級——當你對應用程序進行升級時,如果你想用戶平穩的升級,那麼,你就需要簽上相同的證書。當系統安裝一個升級應用程序時,如果新版本的證書與老版本的證書有匹配的話,那麼,系統才會允許進行升級。如果你沒有為版本簽上合適的證書,當你安裝時,你需要給應用程序指定一個新的包名——在這種情況下,用戶安裝的新版本,被當作是一個全新的應用程序。 ·應用程序模塊化——如果應用程序請求的話,Android系統允許簽有相同證書的應用程序運行在相同的進程里,這樣,系統就會把它們看作是一個單一的應用程序。用這種方法配置應用程序,用戶可以選擇更新每個獨立的模塊。 ·代碼/數據許可權共享——Android系統提供了基於簽名的許可權檢查,因此,如果應用程序間簽有特定的證書,那麼,它們之間可以共享功能。通過多個程序簽有相同的證書並且使用基於簽名的許可權檢查,你的程序可以以一種安全的方式共享代碼和數據。還有一個決定簽名策略的重要因素是:如何設定key的有效期。 ·如果你計劃支持單個應用程序的升級,你需要確保你的key擁有一個超過期望的應用程序生命周期的有效期。推薦使用25年或更多的有效期。當你的key過期了,用戶也就不能平穩的更新到新版本了。 ·如果你想給多個無關的應用程序簽上相同的key,那麼,你必須確保key的有效期超過所有應用程序所有版本的生命周期,包括將來有可能添加到這一陣營的程序。 ·如果你想在AndroidMarket上發布你的程序,key的有效期必須在2033.10.22以後。Market伺服器強制這一要求,目前是保證用戶可以平穩的更新他們的程序。 當你設計應用程序時,一定要把這些點記在腦子里,並且使用一個合適的證書來為應用程序簽名。 簽名的基本設定 在你開始之前,你必須保證Keytool對SDK編譯工具來說是可利用的。多數情況下,你可以通過設置JAVA_HOME環境變數來告訴SDK編譯工具如何找到Keytool。另外,你還可以添加JDK中Keytool的路徑到PATH的變數里。 如果你在Linux上開發,並且使用GNU編譯器來編譯Java,那麼,請確保系統是使用JDK中的Keytool,而不是gcj。如果Keytool已經在你的PATH中,它有可能是對/usr/bin/keytool的符號鏈接。在這種情況下,檢查符號鏈接的目標,確保它是指向JDK中的Keytool。如果你打算對公眾釋放你的應用程序,你還需要Jarsigner工具。Jarsigner和Keytool都包含在JDK中。 Debug模式下簽名 Android編譯工具提供了Debug簽名模式,使得開發和調試應用程序更加容易,而且還滿足Android系統的簽名要求。當使用Debug模式編譯你的app時,SDK工具會調用Keytool工具自動創建一個Debug的keystore和key。然後,這個Debugkey會自動用於apk的簽名,這樣,你不需要使用你自己的key來為應用程序包簽名。 SDK工具使用預先定義好的名字/密碼來創建Debugkeystore/key: ·Keystore名字:「debug.keysotre」 ·Keystore密碼:「android」 ·Key別名:「androiddebugkey」 ·Key密碼:「android」 ·CN:「CN=AndroidDebug,O=Android,C=US」 如果需要的話,你可以改變Debugkeystore/key的位置和名字,或者提供一個自定義的Debugkeysotre/key。然而,任何自定義的Debugkeystore/key必須使用和默認Debugkey(上面描述的)相同的名字和密碼。(在Eclipse/ADT中,操作Windows>Preferences>Android>Build實現。) 注意:你不能將簽有Debug證書的應用程序發布給公眾。 Eclipse用戶 如果你在Eclipse/ADT下開發(並且已經按照上面描述的「簽名的基本設定」配置了Keytool),Debug模式下簽名默認是開啟的。當你運行或是調試應用程序時,ADT會使用Debug證書進行簽名,並運行zipalign,然後安裝到選擇的模擬器或是連接上的設備。整個過程不需要你參與,前提是ADT能訪問Keytool。 Ant用戶 如果你使用Ant來編譯你的apk文件,需要在ant命令中添加debug選項來開啟Debug簽名模式(假設你正在使用由android工具生成build.xml文件)。當你運行antdebug來編譯你的程序時,編譯腳本會生成一個keystore/key,並為apk進行簽名。然後腳本會使用zipalign工具對apk進行對齊處理。整個過程不需要你參與。閱讀「其它IDE下開發:Debug模式編譯」來了解更多的信息。 Debug證書過期 Debug模式下簽名用的證書(默認是Eclipse/ADT和Ant編譯)自從它創建之日起,1年後就會失效。 當證書失效時,你會得到一個編譯錯誤,在Ant編譯上, 錯誤如下: debug: [echo]Packagingbin/samples-debug.apk,andsigningitwithadebugkey... [exec]DebugCertificateexpiredon8/4/083:43PM 在Eclipse/ADT中,Android控制台上你將會看到一個相似的錯誤。 為了解決這個問題,只需要刪掉debug.keystore文件即可。AVD默認存儲的位置在:~/.android/avd(OSX和Linux),C:DocumentsandSettings\.android(WindowsXP),C:Users\.android(WindowsVista)。 當下一次編譯的時候,編譯工具會重新生成一個新的keystore和Debugkey。 Release模式下簽名 當你的程序准備好釋放給其它用戶時,你必須: 1.獲取一個合適的密鑰 2.在Release模式下編譯程序 3.使用密鑰簽名程序 4.對齊APK包 如果你是使用Eclipse/ADT插件開發,你可以使用導出向導來完成編譯、簽名和對齊等操作。在整個過程中,導出向導甚至還可以生成一個新的keystore和密鑰。因此,如果你使用Eclipse,你可以直接跳到「使用EclipseADT編譯和簽名」。 獲取一個合適的密鑰為了進行程序的簽名,首先,你必須有一個合適的密鑰。密鑰指: ·個人持有。 ·代表個人、公司或組織實體的身份。 ·擁有一個有效期。有效期推薦超過25年。 如果你在AndroidMarket上發布你的程序,需要注意一點的是:程序的有效期需要在2033.10.22之後。你不能上傳一個應用程序,而它的key的有效期是在這個日期之前。 ·不是由AndroidSDK工具生成的Debugkey。 如果你沒有一個合適的key,你一定要使用Keytool來生成一個。如「基本設定」中描述的,確保Keytool可用。 為了用Keytool生成一個key,使用keytool命令並傳入一些可選參數,如下表所示。 警告:確保密鑰的安全。一定要閱讀「安全儲存你的密鑰」中討論如何確保你的密鑰的安全以及這對你和用戶為何如此重要。尤其是,當你生成你的密鑰時,一定要為keystore和key使用強密碼。

㈨ 如何用命令行編譯打包生成apk

一、搭建搭建環境
1. 安裝JDK 和 Android SDK
2. 配置環境變數
D:\android-sdk-windows\tools
C:\Program Files\Java\jdk1.6.0_20\bin
3. 例子信息
項目目錄:D:\ProjectDemo
SDK目錄 :D:\android-sdk-windows\platforms\android-8\
二、命令行編譯Android項目
1. 生成R文件
2. Java代碼生成class文件
3. class文件生成dex文件
4. 打包資源
5. 生成apk
6. 創建密匙
7. 簽名apk

㈩ 用eclipse能不能只生成apk文件而不啟動虛擬機

用eclipse是可以只生成apk文件而不啟動虛擬機的。
解決方案:
//developer:「Ant自動編譯打包」.com/tools/building/building-cmdline.com/tools/building/building-cmdline,通過命令行即可完成apk的生成.android。
或者看官網教程android可以用ant進行自動打包。
相關延伸:
用eclipse 將已有的android應用程序安裝到android虛擬機中的方法:
1、安裝usb驅動
手機要能與電腦相連,當然要安驅動了。效果就是你插入手機,電腦顯示驅動已識別。驅動安裝的官方教程:http://developer.android.com/sdk/win-usb.html
2、設置android手機為USB調試模式
步驟: menu—> 設置 —> 應用程序 —> 開發 , 選擇【USB調試】
3、通過eclipse上真機測試
沒用真機時,用eclipse開發android程序都是點run,然後跑模擬器的。安裝好手機的usb驅動後,還是點run,程序就會神奇的在真機上運行了,效果與在模擬器中的一樣,非常簡單,而且速度比用模擬器塊很多。
如果沒有效果還是在模擬器上運行,則在eclipse中:
右鍵->run as->run configurations->target
把那個虛擬機選項勾掉,再運行,如果之前的驅動安裝正確的話,eclipse會讓你選擇用那個設備運行(有真機與你的虛擬機可選),此時選那個真機的就可以了
4、發布
android工程文件夾下的bin文件夾在編譯成功後會生成xxxxx.apk,就是可執行的android程序,你可以用任何手機同步工具像安裝其他android程序一樣安裝你自己的項目。之後在android的應用程序目錄下找到你的項目圖標,就可以運行。

熱點內容
緩存視頻合並工具最新版 發布:2025-05-16 09:35:03 瀏覽:193
花雨庭伺服器ip地址和埠 發布:2025-05-16 09:34:58 瀏覽:239
同時修改多台伺服器管理地址工具 發布:2025-05-16 09:20:36 瀏覽:421
什麼配置就能玩地平線 發布:2025-05-16 09:13:46 瀏覽:82
python旋轉圖片 發布:2025-05-16 09:13:40 瀏覽:638
少女前線防檢測腳本 發布:2025-05-16 08:59:07 瀏覽:728
編譯器對系統的依賴 發布:2025-05-16 08:37:29 瀏覽:711
javamap數組 發布:2025-05-16 08:37:28 瀏覽:451
移動光貓如何自行修改密碼 發布:2025-05-16 08:20:15 瀏覽:125
作為基線存儲 發布:2025-05-16 08:15:22 瀏覽:859