1. 如何配置android eclipse gradle環境
方法/步驟
1
首先當然是到官網gradle.org下載最新的gradle版本了,這里我下的是1.1版本,最新是2.0,不過沒影響我們使用
2
下載完成後,放到任意的位置,我的是在D:/gradle-1.1,然後需要放到換進配置,步驟是右鍵「計算機」-「屬性」,進入「高級配置」,選擇「環境變數」,點擊」新建「,配置」GRADLE_HOME「
3
繼續在此處選擇「path」,進行修改,加入「;%GRADLE_HOME%\bin」,注意此處沒有引號,記得前面要加分號,這樣就配置好gradle的環境變數了
4
在命令窗口輸入」gradle -version「,進行驗證,出現以下提示則表示成功
5
接下來是構建一個java項目,可以隨便建一個文件夾,如:D:\javapro1,按照gradle的規約新建相應的文件目錄,類似於maven的一樣,如下
6
最主要的是在該目錄下新建一個gradle文件,build.gradle,文件內容只要一句話即可:
apply plugin:'java'
7
在命令窗口中,進入項目對應文件夾,輸入gradle build,即可完成構建,然後可以在項目文件夾中發現多了一些構建完的文件,這時就完成了一個最簡單的項目構建
8
後面的一些基本命令就是clean、check、assemble等待,具體也可以直接查看官網文檔
http://jingyan..com/article/9225544684a97c851648f486.html
2. 如何為Android NDK的gradle構建文件中指定NDK
apply plugin: 'com.android.model.application'
model{
android {
compileSdkVersion = 22
buildToolsVersion = "23.0.1"
defaultConfig.with {
applicationId = "com.kltz88.car.jnidemo"
minSdkVersion.apiLevel = 14
targetSdkVersion.apiLevel = 22
versionCode = 1
versionName = "1.0"
}
tasks.withType(JavaCompile) {
//指定編譯JDK版本
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
}
android.ndk {
moleName = "test"
ldLibs +="log"
abiFilters +="armeabi"
abiFilters +="armeabi-v7a"
abiFilters +="x86"
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles += file( 'proguard-rules.pro')
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'
}
3. gradle是什麼呢
Gradle是一個構建工具。它是用來幫助我們構建app的,構建包括編譯、打包等過程。我們可以為Gradle指定構建規則,然後它就會根據我們的命令自動為我們構建app。AndroidStudio中默認就使用Gradle來完成應用的構建。有些同學可能會有疑問:」我用AS不記得給Gradle指定過什麼構建規則呀,最後不還是能搞出來個apk。
gradle構建工具多項目管理
實際使用中,往往需要管理的都不是單單一個項目,maven使用依賴,繼承,組成的概念,在父模塊指定自己的子模塊,並且准備一些各個子模塊公用的資源,配置信息等等。將打包的模塊與實現具體功能的模塊分開的做法來管理多個項目。Gradle在這一方面做得更加清楚。
4. 如何使用Gradle構建不同版本的app
對於多種類型的apk包構建,通常有以下需求:
各版本有不同的代碼、資源
上述代碼中各版本有不同的依賴
各版本有不同的Manifest中元素需求
各版本有不同的proGuard
Android
Studio中使用Gradle編譯多種apk包需要靠proctFlavors或者buildTypes實現,如果有兩種proct
flavor和兩種build
type,則他們可以生成2*2=4種不同類型的apk包。下文主要使用proctFlavors自定義apk內容,而buildTypes使用默認
配置用於處理debug版本和release版本。
以下依次來看這4點怎樣實現
一、不同的代碼和資源
要實現build時使用不同的代碼和資源:
在build文件中定義proctFlavors
為每個Flavor創建對應的文件夾
將每個Flavor特有的文件放入文件夾
1.在build文件中定義proctFlavors...
android {
...
defaultConfig { ... }
signingConfigs { ... }
buildTypes { ... }
proctFlavors {
demo {
applicationId "com.buildsystemexample.app.demo"
versionName "1.0-demo"
}
full {
applicationId "com.buildsystemexample.app.full"
versionName "1.0-full"
}
}
}
...
其中defaultConfig{}中為默認值,proctFlavors{}會復寫所有可以復寫的值。
2.為每個Flavor創建對應的文件夾
在上面兩個Flavor的基礎上,假設你想在每個Flavor使用不同的SecondActivity文件,按照下面的步驟:
展開app目錄
右擊src目錄,選擇New>Directory
輸入Flavor的名字,也就是demo,新建
在demo中創建以下文件夾 app/src/demo/java app/src/demo/res app/src/demo/res/layout app/src/demo/res/values 如下圖:
PS:上述過程就是將默認的main下的目錄結構復制過來,想添加其他資源也是同樣的操作
3. 將每個Flavor特有的文件放入文件夾
向上一步新建的目錄中,先在java目錄下建立對應的package,向其中放入SecondActivity.java和其layout文件,並在res目錄下添加本Flavor的AndroidManifest.xml文件。Manifest的merge規則見下文。
另外一種方法是右擊app目錄,選擇添加Activity,在引導界面中最後一項Target Source Set選擇你想添加到的Flavor,Android Studio就會自動為你生成對應的AndroidManifest,不過需要稍加修改。
在添加demo所需文件後,為了添加full所需文件和包,需要在Android Studio中將build variants切換為fullDebug,否則Android Studio不會將full下的java目錄識別為源文件目錄,導致不能添加package。
對於demo和full中對應的相同的文件,注意要保證包名的相同,否則main中代碼對於不同部分的引用,會因為有不同包名而失敗。
二、不同的依賴
在build.gradle中,使用Flavor名+Compile來規定特定Flavor所需依賴:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
demoCompile 'com.android.support:design:22.2.0'
fullCompile 'com.jakewharton:butterknife:6.1.0'
}
三、不同的Manifest需求
Manifest可以通過Merge的方式合並多個Manifest源。通常來說,有三種類型manifest文件需要被merge到最終的結果apk,下面是按照優先權排序:
proctFlavors和buildTypes中所指定的manifest文件
應用主manifest文件
庫manifest文件
簡單來說,manifest的merge會將每個元素及其子元素的節點和屬性進行合並。
例如:
<activity
android:name=」com.foo.bar.ActivityOne」
android:theme=」@theme1」/>
和
<activity
android:name=」com.foo.bar.ActivityOne」
android:screenOrientation=」landscape/>
合並會成為
<activity
android:name=」com.foo.bar.ActivityOne」
android:theme=」@theme1」
android:screenOrientation=」landscape/>
不過
<activity
android:name=」com.foo.bar.ActivityOne」
android:theme=」@theme1」/>
和
<activity
android:name=」com.foo.bar.ActivityOne」
android:theme=」@theme2」
android:screenOrientation=」landscape/>
合並會產生一個沖突,因為都有theme,而theme的屬性不同。
要了解manifest合並的更高級應用,查看Manifest Merger
四、不同ProGuard需求android {
buildTypes {
release {
minifyEnabled true
proguardFile getDefaultProguardFile('proguard-android.txt')
}
}
proctFlavors {
flavor1 {
}
flavor2 {
proguardFile 'some-other-rules.txt'
}
}
}
Android Studio將使用所有的定義在相應buildTypes和相應proctFlavors中的規則文件。
有兩個默認的規則文件:
proguard-android.txt
proguard-android-optimize.txt 存放在SDK中。可以使用getDefaultProguardFile()來獲得文件的完整路徑,他們除了優化的開啟是否不同之外都相同。
5. 如何使用Gradle構建不同版本的app
各版本有不同的代碼、資源上述代碼中各版本有不同的依賴各版本有不同的Manifest中元素需求各版本有不同的proGuardAndroidStudio中使用Gradle編譯多種apk包需要靠proctFlavors或者buildTypes實現,如果有兩種proctflavor和兩種buildtype,則他們可以生成2*2=4種不同類型的apk包。下文主要使用proctFlavors自定義apk內容,而buildTypes使用默認配置用於處理debug版本和release版本。以下依次來看這4點怎樣實現一、不同的代碼和資源要實現build時使用不同的代碼和資源:在build文件中定義proctFlavors為每個Flavor創建對應的文件夾將每個Flavor特有的文件放入文件夾1.在build文件中定義proctFlavorsandroid{defaultConfig{}signingConfigs{}buildTypes{}proctFlavors{demo{applicationId"com.buildsystemexample.app.demo"versionName"1.0-demo"}full{applicationId"com.buildsystemexample.app.full"versionName"1.0-full"}}}其中defaultConfig{}中為默認值,proctFlavors{}會復寫所有可以復寫的值。2.為每個Flavor創建對應的文件夾在上面兩個Flavor的基礎上,假設你想在每個Flavor使用不同的SecondActivity文件,按照下面的步驟:app目錄右擊src目錄,選擇New>Directory輸入Flavor的名字,也就是demo,新建在demo中創建以下文件夾app/src/demo/javaapp/src/demo/resapp/src/demo/res/layoutapp/src/demo/res/values如下圖:PS:上述過程就是將默認的main下的目錄結構復制過來,想添加其他資源也是同樣的操作3.將每個Flavor特有的文件放入文件夾向上一步新建的目錄中,先在java目錄下建立對應的package,向其中放入SecondActivity.java和其layout文件,並在res目錄下添加本Flavor的AndroidManifest.xml文件。Manifest的merge規則見下文。另外一種方法是右擊app目錄,選擇添加Activity,在引導界面中最後一項TargetSourceSet選擇你想添加到的Flavor,AndroidStudio就會自動為你生成對應的AndroidManifest,不過需要稍加修改。在添加demo所需文件後,為了添加full所需文件和包,需要在AndroidStudio中將buildvariants切換為fullDebug,否則AndroidStudio不會將full下的java目錄識別為源文件目錄,導致不能添加package。對於demo和full中對應的相同的文件,注意要保證包名的相同,否則main中代碼對於不同部分的引用,會因為有不同包名而失敗。二、不同的依賴在build.gradle中,使用Flavor名+Compile來規定特定Flavor所需依賴:dependencies{compilefileTree(dir:'libs',include:['*.jar'])compile'com.android.support:appcompat-v7:22.2.0'demoCompile'com.android.support:design:22.2.0'fullCompile'com.jakewharton:butterknife:6.1.0'}三、不同的Manifest需求Manifest可以通過Merge的方式合並多個Manifest源。通常來說,有三種類型manifest文件需要被merge到最終的結果apk,下面是按照優先權排序:proctFlavors和buildTypes中所指定的manifest文件應用主manifest文件庫manifest文件簡單來說,manifest的merge會將每個元素及其子元素的節點和屬性進行合並。例如:和合並會成為不過和合並會產生一個沖突,因為都有theme,而theme的屬性不同。要了解manifest合並的更高級應用,查看ManifestMerger四、不同ProGuard需求android{buildTypes{release{('proguard-android.txt')}}proctFlavors{flavor1{}flavor2{proguardFile'some-other-rules.txt'}}}AndroidStudio將使用所有的定義在相應buildTypes和相應proctFlavors中的規則文件。有兩個默認的規則文件:proguard-android.txtproguard-android-optimize.txt存放在SDK中。可以使用getDefaultProguardFile()來獲得文件的完整路徑,他們除了優化的開啟是否不同之外都相同。
6. 如何為android ndk的gradle構建文件中指定ndk
一個新的項目中就包含這些文件,build 是兩個,一個項目一個是 APP Model 的。另外在 APP 中可以看見有一個 manifest 文件夾,這意味著著可以有多 AndroidManifest 文件。
另外值得一說的是 gradle.properties 文件也是含有兩個,但是卻是一個是全局,一個是項目的;這與上面的 Build 文件有何區別?區別在於全局文件存在於 C:Users用戶名.gradle文件夾中,該文件有可能沒有,需要自己創建,創建後所有項目都將具有訪問許可權,在該文件中一般保存的是項目的一些變數等,如果是無關緊要的變數可以保存在項目文件中,如果是用戶名密碼等變數則需要保存在全局文件中。
至於項目的配置文件一般是空的。
local.properties
?
1
2
3
4
5
6
7
8
9
10
## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file should *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=D:ToolKitsAndroidsdk
其中包含了你的 sdk 配置,當然你還可以配置 ndk 路徑;格式與 sdk 一樣。
settings.gradle
?
1
include ':app'
該文件中就僅僅只包含了一句話,在你的項目中如果有多個 Model 存在的時候,就可以選擇包含哪些進行編譯。
7. 如何用gradle執行ionic build android
如何用gradle執行ionic build android –release的時候自動簽名
假設android的platform和keystore已經有了,我們可以看到如下目錄結構
其中release-signing.properties這個時候應該是沒有的,現在我們新建一個release-signing.properties
storeFile=YiShangpu.keystore
key.store.password=your password
key.alias=YiShangpu
key.alias.password=your password
8. 如何為Android NDK的gradle構建文件中指定NDK
我一直在嘗試過解決這個問題。但在通過編寫自定義任務,使Android工作室在Eclipse中使用Application.mk和Android.mk就像結束了。
我的build.gradle看起來像這樣
應用插件:'com.android.application「安卓{ buildTypes {
發布 {
runProguard假
proguardFiles getDefaultProguardFile('proguard的-android.txt'),'proguard-rules.pro「
}
} compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
} compileSdkVersion 20
buildToolsVersion「20.0.0」 defaultConfig {
15的minSdkVersion
targetSdkVersion 20
版本code 1
} packagingOptions {
排除「META-INF /相關內容」
排除「META-INF / LICENSE」
排除「META-INF /注意事項」
} sourceSets.main {
jniLibs.srcDir'的src / main /庫「
jni.srcDirs = [] //禁用自動NDK的構建通話
}
}任務buildNative(類型:執行){
高清ndkBuild = NULL;
高清ndkBuildingDir =新的文件(「鋼骨混凝土/主/ JNI」);
高清hasNdk = FALSE;
如果(System.getenv(「NDK_BUILD_CMD」)!= NULL){
hasNdk = TRUE;
ndkBuild =新的文件(System.getenv(「NDK_BUILD_CMD」))
} 命令行ndkBuild,「--directory」,ndkBuildingDir doFirst {
如果(!hasNdk){
logger.error('##################')
logger.error(「NDK構建失敗!」)
logger.error('原因:NDK_BUILD_CMD未設置。')
logger.error('##################')
}
斷言hasNdk:「NDK_BUILD_CMD未設置。」
}
}
tasks.withType(JavaCompile){compileTask - &GT; compileTask.dependsOn buildNative}任務cleanNative(類型:執行){
高清ndkBuild = NULL;
高清ndkBuildingDir =新的文件(「鋼骨混凝土/主/ JNI」);
高清hasNdk = FALSE; 如果(System.getenv(「NDK_BUILD_CMD」)!= NULL){
hasNdk = TRUE;
ndkBuild =新的文件(System.getenv(「NDK_BUILD_CMD」))
} 命令行ndkBuild,「--directory」,ndkBuildingDir,「干凈」 doFirst {
如果(!hasNdk){
logger.error('##################')
logger.error(「NDK構建失敗!」)
logger.error('原因:NDK_BUILD_CMD未設置。')
logger.error('##################')
}
斷言hasNdk:「NDK_BUILD_CMD未設置。」
}
}
clean.dependsOn「cleanNative」
對於這個工作,你需要設置一個環境變數NDK_BUILD_CMD要設置的確切NDK建造可執行文件。
在Windows上,你可以設置環境變數NDK_BUILD_CMD點到你的NDK-build.exe
在Mac上,你在你的.bash_profile設置路徑變數不在GUI應用程序訪問(因此Android的Studio將無法讀取它們)。
所以,編輯你的.bash_profile是像
GRADLE_HOME = {} path_to_gradle
ANDROID_SDK_ROOT = {} path_to_sdk_dir
ANDROID_HOME = $ ANDROID_SDK_ROOT /平台的工具
ANDROID_NDK_HOME = {} path_to_ndk
NDK_BUILD_CMD = $ ANDROID_NDK_HOME / NDK的構建出口PATH=$GRADLE_HOME/bin:$ANDROID_HOME:$ANDROID_SDK_ROOT/tools:$ANDROID_NDK_HOME:/opt/local/bin:/opt/local/sbin:$PATHlaunchctl SETENV GRADLE_HOME $ GRADLE_HOME
launchctl SETENV ANDROID_HOME $ ANDROID_HOME
launchctl SETENV ANDROID_NDK_HOME $ ANDROID_NDK_HOME
launchctl SETENV NDK_BUILD_CMD $ NDK_BUILD_CMD
該launchctl線將使您的環境變數的Android Studio中可見。
PS:本.bash_profile中運行每次打開終端的時間。因此,對於這個正確與Android工作室工作,你需要啟動一次終端,然後運行Android的工作室。否則,構建就會失敗說NDK_BUILD_CMD未設置。我還沒有發現任何方式的Mac啟動時設置的值。如果有人能找到一個辦法,請隨時提出。
9. android studio 怎麼配置gradle
build.gradle
//設置腳本的運行環境
buildscript {
//支持java 依賴庫管理(maven/ivy),用於項目的依賴。
repositories {
mavenCentral()
}
//依賴包的定義。支持maven/ivy,遠程,本地庫,也支持單文件
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
//聲明構建的項目類型,這里當然是android了
apply plugin: 'android'
//設置編譯android項目的參數
android {
compileSdkVersion 17
buildToolsVersion "17"
defaultConfig {
minSdkVersion 8
targetSdkVersion 17
}
//Android默認配置
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
//測試所在的路徑,這里假設是tests文件夾,沒有可以不寫這一行
instrumentTest.setRoot('tests')
}
//這個是解決lint報錯的代碼
lintOptions {
abortOnError false
}
/**
* 簽名設置
*/
signingConfigs {
myConfigs {
storeFile file("簽名文件地址")
keyAlias "..."
keyPassword "..."
storePassword "..."
}
}
/**
* 混淆設置
*/
buildTypes {
release {
signingConfig signingConfigs.myConfigs
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
/**
* 渠道打包(不同包名)
*/
proctFlavors {
qqqq {
applicationId = '包名'
}
hhhhh {
applicationId='包名'
}
}
}
/**
* .so文件的導入
*/
task NativeLibs(type: Copy) {
from fileTree(dir: 'libs', include: 'armeabi/*.so') into 'build/lib'
}
tasks.withType(Compile) {
options.encoding = "UTF-8"
}
tasks.withType(Compile) {
compileTask -> compileTask.dependsOn NativeLibs
}
clean.dependsOn 'cleanCopyNativeLibs'
tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
pkgTask.jniFolders = [new File(buildDir, 'lib')]
}
//依賴庫
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
gradle 作為構建工具,能夠很方便的使用本地jar包,以下為使用的代碼塊。
ependencies {
//單文件依賴
compile files('libs/android-support-v4.jar')
//某個文件夾下面全部依賴
compile fileTree(dir: 'libs', include: '*.jar')
}
android {
}
gradle 同時支持maven,ivy,由於ivy我沒用過,所以用maven 作為例子,以下為代碼塊:
repositories {
//從中央庫裡面獲取依賴
mavenCentral()
//或者使用指定的本地maven 庫
maven{
url "file://F:/githubrepo/releases"
}
//或者使用指定的遠程maven庫
maven{
url "遠程庫地址"
}
}
dependencies {
//應用格式: packageName:artifactId:version
compile 'com.google.android:support-v4:r13'}
android {
}
對於項目依賴 android library的話,就不是依賴一個jar,那麼簡單了,在這里需要使用gradle mulit project 機制。在過去,android library並沒有一個很好的包管理方式,簡單來說,在gradle出現以前,官方並沒有一種用於管理android library 依賴包的方式,一般我們都是直接下載別人的android library project 源碼進行集成,而對於第三方的android-maven-plugin 用的是apklib 格式。
而現在,官方終於推出一種android library的打包格式,擴展名為*.aar。前面提到,目前android gradle插件並不支持本地直接使用*.aar文件,不過,支持包管理庫的引用方式,下面,我為大家說一下,怎麼對android library 發布使用。
打包android library
對android library 進行打包直接在library項目下面使用gradle build 即可,然後,你就會在 build/libs 目錄下看到兩個*.aar文件,一個debug包用的,一個是release 下用的,看個人需求使用,這里我們用的是release 版本的 .aar 文件。
10. 如何為Android NDK的gradle構建文件中指定NDK
apply plugin: 'com.android.model.application'
model{
android {
compileSdkVersion = 22
buildToolsVersion = "23.0.1"
defaultConfig.with {
applicationId = "com.kltz88.car.jnidemo"
minSdkVersion.apiLevel = 14
targetSdkVersion.apiLevel = 22
versionCode = 1
versionName = "1.0"
}
tasks.withType(JavaCompile) {
//指定編譯JDK版本
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
}
android.ndk {
moleName = "test"
ldLibs +="log"
abiFilters +="armeabi"
abiFilters +="armeabi-v7a"
abiFilters +="x86"
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles += file( 'proguard-rules.pro')
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'
}
附上出處鏈接:http://www.codeceo.com/article/android-studio-gradle-ndk.html