編譯方式gradle
⑴ Gradle--多環境編譯打包
前段時間產品經理提了個需求,測試環境,預發布環境,生產環境編譯下的app需要在同一步手機同時存在,實現是可以的,但是得有三個環境下的不同applicationId,網路地圖key,域名,桌面logo,剛開始是想需要什麼環境就換什麼類型,很麻煩,每次都要換一次重新編譯,我就在想有什麼便捷的方法一鍵設置更換,gradle其中的Flavors功能可以實現我想要的。
這個是主項目中build.gradle中的配置,有三個環境我命名為 xiaoming_test,xiaoming_ready,xiaoming_proct,並有不同的applicationId,BAIDU_MAP_KEY,HTTP_HEAD,HTTP_HEAD_java,app_icon,(解釋一下,有兩條域名是因為後面後台是用java開發而做的區分),到這里應該大家有疑問,舉個栗子,我們一般開發的第三方key是在mainifests進行注冊申請的,而我們gradle如何去引用資源的。這里有兩種引用方式,直接引用,自定義引用。
引用logo在application的icon屬性命名為app_icon,$表示引用這個命名,對應的是gradle的配置。
在mainifests自定義為HTTP_HEAD,value值通過${HTTP_HEAD}引用,getHttpHead()獲取自定義注冊的域名值。從而實現每次請求對應的域名,只需在gradle里設置。
只需打開studio的BuildVariarts設置,選擇需要的環境即可重新編譯不同的apk,方便快捷的做到一鍵設置快速打包。
⑵ gradle可以編譯android源碼嗎
方法/步驟
1
(可以省略)通過cmd命令行下載gradle源碼:
git clone https://github.com/spring-guides/gs-gradle-android.git
2
下載最新的gradle安裝包,地址:
http://gradle.org/downloads
點擊下載二進制文件
3
解壓到d盤,路徑為:D:\gradle-2.4
4
打開「計算機」-「右鍵」-「屬性」-「更改設置」-「高級」-「環境變數」,
在系統變數中,點擊新建,屬性名為GRADLE_HOME,屬性值為"D:\gradle-2.4"
5
打開「計算機」-「右鍵」-「屬性」-「更改設置」-「高級」-「環境變數」,
在系統變數中,找到Path,將";D:\gradle-2.4\bin"加入到Path中
6
打開cmd命令行,執行gradle,如果出現如圖所示,則說明gradle安裝成功
7
打開cmd命令行,進入android工程目錄,找到build.gradle文件,在目錄執行執行
gradle build
既可開始使用gradle打包apk,在成功後會在同目錄生成build文件夾,
⑶ Gradle編譯-APK編譯過程
在早期的Android設備中(Android5.0以下)都是使用的Dalvik虛擬機,Dalvik支持經過轉換的.dex文件。.dex格式是專為Dalvik設計的一種適合內存和處理器速度有限的系統。
但是在Android5.0,google用ART全面取代的Dalvik。Android7.0中又添加了JIT編譯器,使得Android性能也有不少提升。
上圖為從Android源文件開始,最終到APK的過程。
下面博客文章詳細介紹了dalvik虛擬機,可供參考學習。
https://www.cnblogs.com/lao-liang/p/5111399.html
dvm(art)和jvm屬於不同的虛擬機平台,不同平台要求執行的文件類型也就不一樣
dvm(art)--.dex文件
jvm--.class文件
在編譯和生成上
java source --.class文件 ---jvm執行
java source --.class文件 ---.dex文件 --- dvm執行
Android Runtime (ART) 是 Android 上的應用和部分系統服務使用的託管式運行時。ART 及其前身 Dalvik 最初是專為 Android 項目打造的。作為運行時的 ART 可執行 Dalvik 可執行文件並遵循 Dex 位元組碼規范。
ART 和 Dalvik 是運行 Dex 位元組碼的兼容運行時,因此針對 Dalvik 開發的應用也能在 ART 環境中運作。不過,Dalvik 採用的一些技術並不適用於 ART。
ART的功能
1.預先 (AOT) 編譯
使用ART編譯器時,應用程序在安裝期間就已經把dex位元組碼翻譯並存儲在設備上,運行時,只需要執行這些翻譯好的就可以了,因此執行速度也快了不少。
2.垃圾回收方面的優化
3.開發和調試方面的優化
構建流程涉及許多將項目轉換成 Android 應用軟體包 (APK) 的工具和流程。構建流程非常靈活,因此了解它的一些底層工作原理會很有幫助。
⑷ 怎麼將已有的代碼用gradle編譯工具編譯
1. 為什麼選擇Gradle?
2. 簡單入門
2.1 使用Intellij Idea創建gradle項目
首先在Idea中啟用Gradle支持:Settings->Plugins: Gradle
然後創建一個gradle項目或模塊,會發現目錄結構和maven的很像,其中build.gradle是gradle的配置文件,類似於maven中pom.xml文件,以下是build.gradle的簡單示例:
apply plugin: 'java'
group = 'org.yousharp'
version = '1.0-SNAPSHOT'
sourceCompatibility = 1.7
targetCompatibility = 1.7
repositories {
mavenCentral()
maven { url "repo.maven.apache.org/maven2" }
}
dependencies {
compile group: 'com.google.guava', name: 'guava', version:'17.0'
compile group: 'redis.clients', name: 'jedis', version:'2.6.0'
testCompile group: 'junit', name: 'junit', version:'4.11'
}
插件(plugin):是gradle的一種擴展,gradle預定義了很多插件,常見的如java插件、war插件等;java插件中定義了一些有用的task,如編譯源碼、執行單元測試、生成jar包、約定默認的目錄結構等; repositories定義倉庫,dependencies定義項目的依賴,比maven的XML定義更簡潔;
那麼,如何編譯、測試,以及運行gradle的項目呢?
剛才說到java插件預定義了很多task,其中就包括編譯、測試、生成jar包等task,可以在命令行通過 $ gradle tasks 查看項目已定義的所有task以及含義,如java插件中常用的task有:
+ assemble: 編譯
+ build:編譯並執行測試
+ clean:刪除build目錄
+ jar: 生成jar包
+ test:執行單元測試
2.2 將Java項目從maven遷移到gradle
如何將一個java項目從maven遷移到gradle呢?gradle集成了一個很方便的插件:Build Init Plugin,使用這個插件可以很方便地創建一個新的gradle項目,或者將其它類型的項目轉換為gradle項目。
要將maven項目轉換為gradle項目,只需要在項目的pom文件所在的目錄下執行以下命令:
$ gradle init --type pom
上面的命令會根據pom文件自動生成gradle項目所需的文件和配置,然後以gradle項目重新導入即可。
⑸ Android Studio開發解讀 - gradle編譯項目的build目錄結構
轉自:http://www.cnblogs.com/bbqzsl/p/5926591.html
本文針對android studio工具下的ndk開發。
build目錄就是項目模塊構建過程和結果使用到的位置。
項目根目錄下有一個build目錄。
項目根目錄下各模塊子目錄下各自有一個build目錄。
build目錄下一般由4個子目錄組成:
generated由aapt工具根據資源數據自動生成的java類
intermediates中間過程
outputs輸出結果
tmp編譯日誌
根目錄下的build目錄,這個build服務於整個項目,在本文中稱其做項目build,以區分模塊build。
項目build一般只有generated和intermediates兩個子目錄,用於生成這個項目的buildTools。
generated目錄會生成一個mockable-android-${buildToolsVersion}.jar。
intermediates目錄根據需要生成dex-cache,這個目錄纖謹下的xml文件配置jar包在編譯過程中如何緩沖使用。
模塊build目錄在make mole ${MOD_NAME}後就會生成4個子目錄。
我們來看intermediates目錄,中間生成和編譯過程使用到的目錄。
這個目錄下有這么幾個比較關心的子目錄:
binaries NDK,生成c++連接庫
bundles 模塊鏈接到的自定義毀櫻基jar包和各abi版本的c++鏈接庫都捆綁在這里
classes模塊中生成的自定義java類
exploded-aar 由aar包解壓出來的資源,jar包和so鏈接文件等。用於本模塊的鏈接和集成。
jniLibs 在build.grade中你指定的jniLibs目錄整個拷貝。模塊鏈接到的庫文件會被捆到bundles目錄。
objectFiles NDK,生成c++中間對象(.o)文件。
transforms 根據你當前選擇的proctFlavor和其包含的abiFilter,從bundles和binaries取出鏈接庫。
接著就是output目錄:
aar如果模塊是android library
jar 如果模塊是java library
apk 如果是Activity應用程序
最後就是tmp目錄:
compile$(NDK_Mole)$(ABI)$(BUILD_TYPE)$(PRODUCT_FLAVOR)MainCpp ndk編譯日誌
link$(NDK_Mole)$(ABI)$(BUILD_TYPE)$(PRODUCT_FLAVOR)$(LIB_TYPE) ndk鏈接日誌
編譯的子目錄由三要素組合頌磨而成,分別是
BUILD_TYPE := debug|release
ProctFlavor := 你在gradle文件中創建的flavor
abiFilter :=
逆向深入objc,c++ windows下仿objc動畫層UI引擎