赞
踩
(1)
bing android studio 本地 gradle plugin 目录
(2)
https://www.cnblogs.com/wxishang1991/p/5457878.html
刚刚从eclipse转androd studio遇到了很多坑,今天就帮大家来填填坑
自2013年5月16日,在I/O大会上,谷歌推出新的Android开发环境——Android Studio,并对开发者控制台进行了改进,增加了五个新的功能, google就已经彻底放弃eclipse 转as了!
我们知道as选择了最优秀的构建工具gradle
Gradle:Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。
面向Java应用为主。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。前途宽广啊
下面进入主题在as中主要是配置gradle和android gradle插件,注意了gradle和(android gradle插件)一定不能混为一谈,2者是有区别的。
android gradle插件依赖于gradle.目前最新的gradle版本是2.1.3
1.gradle的配置
当我们在setting下gradle下设置gradle选择“use defalut gradle wrapper(recommended)”时,as就会根据{project.dir}\gradle\wrapper\gradle-wrapper.properties文件中的配置去gradle
我们用as构建android项目时,配置gradle时我们必须在{project.dir}\gradle\wrapper\gradle-wrapper.properties文件中配置gradle包, 配置的gradle必须在缓存目录( “用户主目录/.gradle/wrapper/dists/gradle-*.*.*”)或者在as安装目录下的gradle目录下存在对应的版本。
例如我的电脑:C:\Users\dsfg\.gradle\wrapper\dists\gradle-2.4-all
1 2 3 4 5 6 |
|
这个配置的gradle如果在目录“用户主目录/.gradle/wrapper/dists/..”存在的话,as就不会去https\://services.gradle.org/distributions/gradle-2.2.1-all.zip去下载了,as就会利用该目录下的缓存,如果该目录下不存在gradle的话as就会去站点根据gradle的版本去下载到“用户主目录/.gradle/wrapper/dists/gradle-2.2.1-all”目录下.
如果选择的是“use local gradle distribution”的话表示用的是本地的gradle,本地的gradle是在as的主目录下的gradle目录下,比如我的电脑D:\android开发环境\android-studio-ide-143.2739321-windows\android-studio\gradle\gradle-2.10,而不会去缓存目录 “用户主目录/.gradle/wrapper/dists/gradle-*.*.*”中去找。
“global gradle setting”我们暂时不考虑
2.android gradle 插件的配置
上面我讨论的是gradle的配置,下面我们来说说android gradle 插件的配置,我们通过主工程项目的build.gradle(不是module的build.gradle)来设置android gradle 插件
在build.gradle中
1 2 |
|
这里配置的android gradle插件的版本是2.0.0,再一次强调我们一定要记住gradle版本和android gradle插件的版本根本不是一回事,不能混为一谈,
下面是android studio版本, gradle版本,android gralde 插件的版本关系对应表
下面附上官方的文档:http://tools.android.com/tech-docs/new-build-system/version-compatibility
所有android gradle 插件版本以及特征见 http://tools.android.com/tech-docs/new-build-system
想深入了解Gradle核心语言Groovy的朋友可以点击下面链接,里面详细介绍了groovy特定领域语言
Gradle build Android application groovy—DSL特定领域语言
(2)
https://qiita.com/chikurin/items/0a37c77679422023198d
これを書いた時のAndroid Studioのバージョンを書いていなかったので追記
Android Studio 0.8.9
Gradle Plugin 0.12.2
また、Android Studioが1.0が公開され、それに伴っていくつかGradleのビルドプロパティが変更になっています。
runProguardがminifyEnabledになったりしているので注意。
詳細は以下のリンクを参照
Migrating Gradle Projects to version 1.0.0 – Android Tools Project Site
http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0
ちょいちょいAndroidアプリの開発を始めて、幾度と無くGradleでハマったのでアバウトなところをメモ。
Gradle自体よりもAndroid Studioよりなので注意。
Android Studioでプロジェクトを作成すると、以下の様なGradle関係のファイルが作成される。
この中の太文字のファイルについて、それらの役割と記述の意味について簡単に解説する。
project root
-app
--libs
--build.gradle
-gradle
--wrapper
-modules
--module
---build.gradle
-build.gradle
-settings.gradle
プロジェクト名で表記されるbuild.gradle
プロジェクト全体での共通するビルド設定を記述する
ビルドスクリプトで外部ライブラリを使いたい場合は、そのライブラリをスクリプトのクラスパスに追加する必要がある。
これはbuildscript
中で依存関係を記述するdependencies
で行う。
ここに使用するライブラリやバージョンを記述する事で、ビルド時に必要なライブラリを自動的にDLする。
以下がそのサンプル
dependencies { classpath 'com.android.tools.build:gradle:0.12.+' classpath 'org.robolectric:robolectric-gradle-plugin:0.11.+' }
また、ここで記述した外部ライブラリはrepositories
でDL先を指定できる。
repositories { mavenCentral() }
見ての通り、これはdependencies
で宣言した2つのライブラリを、Mavenのセントラルから拾ってくる。
以下はサンプルのスクリプト全体
buildscript { repositories { //Mavenセントラルから拾ってくる mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.12.+' classpath 'org.robolectric:robolectric-gradle-plugin:0.11.+' } } allprojects { repositories { mavenCentral() } }
また、Gradleではライブラリのバージョンを記述する際に、
classpath 'com.android.tools.build:gradle:0.12.+'
のように「+」を用いて使用するバージョンを固定しない事が出来る。
だが、Android GradleプラグインとAndroid SDK、Gradleのバージョンの関係がシビアで、何もしていないのにビルドに失敗するといった現象が起きるらしい。
その原因がこの曖昧なバージョン指定によるものらしいので、むしろ固定的に宣言したほうが無難との意見もある。
allproject
についてこのサンプルでは設定していないが、各種プロジェクトで分けたい場合は、project(':<project name>')
を付けて設定することも可能。
本来ならプロジェクト毎のbuild.gradleに書くべき。
なのだけど、Gitのサブモジュールとしてプロジェクトを追加していて、そちらの編集を行いたくない場合になどに使う。
ビルド対象となるプロジェクトの基本設定を行う。
Androidでは主にプロジェクト全体で必要なサブプロジェクトを記述。
外部ライブラリを使用する場合に、適当なディレクトリに配置したあと、そのディレクトリをinclude
することで使えるようになる。
たとえばvolleyをmodules/volleyみたいな感じで引っ張ってきたとすれば、
include ':app',':modules:volley'
とする。
appと表記される
アプリケーション固有の設定を行う
幾つかのブロックに分かれているので、それぞれにどういった内容を記述するかを簡単に書く。
基本的にこれらのブロックに記述の順序は無いが、signingConfigブロックとbuildTypesブロックだけは例外で、signingConfigブロックを先に記述する必要がある。
androidブロック(Android DSL)
compileSdkVersionやbuildToolsVsersionの記述
この中に他のブロックが含まれる
defaultConfigブロック
マニュフェストエントリなどを記述
プロダクトフレーバーの一種
ここで設定した項目は、Android StudioのProject Structureダイアログ(Flavorsタブ)に表示される
Project Structureからも直接ビルドスクリプトを編集できる
signingConfigブロック
署名付きAPKファイルを生成する際に使用する
このブロック内にreleaseConfigといったコンフィグを作成し、使用するキーストアや鍵の設定を行う
パスワードなどは直接記述しないこと
環境変数からキーストアの情報を参照する場合は次のようにする。
System.getenv("KEYS")
buildTypeブロック
Debug版やRelease版など、複数のバージョンをビルドする際に使用する
デフォルトでdebugとreleaseが用意されている
もちろん、任意のビルドタイプを追加することが可能
productFlavorsブロック
buildTypeと同じようでちょっと違う。
有料版と無料版や同じアプリの別デバイス対応など、同じプロジェクトから複数のアプリをビルドする際に使用する
また、buildType同様、使用するソースセットや依存関係の記述が可能
buildTypeとproductFlavorの組合せには、ビルドバリアント(build variant)と呼ばれる(Android Studioに表示されているアレ)
dependenciesブロック
依存関係の記述を行う
apply plugin
でAndroidプラグインの宣言を行う。
アプリケーションに対する設定
apply plugin: 'com.android.application'
Androidのライブラリプロジェクトに対しては
apply plugin: 'com.android.library'
になる。
注意点としては、AndroidプラグインとJavaプラグインは共存できない。
このため、Javaプラグインと依存関係にあるプラグインの利用もできないので注意されたし。
以下はスクリプト全体のサンプル抜粋
apply plugin: 'android' //AndroidでGradleを使うときの記述。最近フルパスで書けって言われる //com.android.application //androidのビルド設定のメイン android { //signingConfigsブロック signingConfigs { release_config { keyPassword System.getenv("KEYS") } } //アプリをビルドするSDKとかその辺りの設定 compileSdkVersion 20 buildToolsVersion '20' defaultConfig { minSdkVersion 10 //インスコ出来る最小 targetSdkVersion 20 //インスコ対象端末 //アプリのバージョン識別子 //これを上げないとGoogle PlayでVerUP出来ない versionCode 1 versionName '1.0' } //ビルドタイプブロック //ReleaseとDebugでそれぞれのタスクとか書ける buildTypes { release { //難読化のProGuard設定 //ProGuardファイルは難読化の除外設定とかを記述する runProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' signingConfig signingConfigs.release_config } debug{ runProguard false } } //プロダクトフレーバーブロック productFlavors { //ステージングとリリースで切り替える staging { applicationId "sample.test.applicationname.staging" } product { applicationId "sample.test.applicationname" } } } //依存関係 dependencies { repositories { mavenCentral() } //外部ライブラリ関係 //lib配下のjar郡 compile fileTree(dir: 'libs', include: ['*.jar']) //サブモジュールとして追加した連中 compile project(':modules:volley') androidTestCompile 'com.google.dexmaker:dexmaker:1.1' //external に追加するやつら compile 'com.google.code.gson:gson:2.2.4' compile 'com.android.support:appcompat-v7:20.0.0' }
それぞれの意味は中身に記載
だいぶ長くなったのでこのへんで。
もっとGradleよりだとか、実用的な話は別に上げるかもしれません。
第5回 Android StudioとGradle[前編]:Android Studio最速入門~効率的にコーディングするための使い方|gihyo.jp … 技術評論社
http://gihyo.jp/dev/serial/01/android_studio/0005
AndroidStudioのbuild.gradle、setting.gradleについて - Qiita
http://qiita.com/lastcat_/items/ba7510f0c25cfdfd325a
意外とつまづく、Android Studioでサンプルを開く - Qiita
http://qiita.com/dokubeko/items/d3f1bdf07c2c1dbd9835
第 4 回・新 IDE : Android Studio を使ってみよう!-Part2- | ピックアップ | ギャップロ
http://www.gaprot.jp/pickup/android-ide/vol4/
Tips : Android Studio でGradleビルド - [séns]
http://tomoyukim.hatenablog.com/entry/2014/07/10/101227
など
(3)
https://www.jianshu.com/p/33089ca7c98e
1.问题
当我们从团队协作者或者开源Android项目网站上获取以Gradle构建的Android项目,并点击Open an existing Android Studio project将它导入Android Studio时,经常遇到如下Android Studio未响应的问题:
Building XXX Gradle project info
2.分析
查看idea.log,我们得知问题是由Started sync with Gradle
时造成Connection Failed
而引发的。
idea.log
原因之一可能是该Android项目所需的Gradle版本与本地存在的Gradle版本并不适配。因此,Android Studio会自动去下载该Android项目所需的Gradle版本。
然而,却跪倒在GFW面前。
3.解决
通过在Android Studio中依次点击File > Settings > Build, Execution, Deployment > Gradle
,我们可以锁定当前项目使用的Gradle的位置。[2]
作者:芥丶未央
链接:https://www.jianshu.com/p/33089ca7c98e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。