Gradle for Android 使用之旅之从创建项目到发布

Gradle Build Files in Android 第二章

从创建项目到发布

2.1 Setting Project Properties

问题

如何通过ext节点把一些常量从build.gradle中移除加入到gradle.properties,或者在控制台-p设置值。

解决方法

  • build.gradle中通过ext把例如版本号,版本名集中设置。

    例如:

    ext {
      appcompat_version = '24.2.1'
      versionCodes=13
      versionNames='2.3'
    }

使用:

    defaultConfig {
       applicationId "com.branch.www.gradledemo"
       minSdkVersion 18
       targetSdkVersion 24
       versionCode versionCodes
       versionName versionNames
    }

或

    compile("com.android.support:appcompat-v7:$appcompat_version")
  • 使用gradle.properties

    例如在gradle.properties加入:

      login='user'
      pass='my_long_and_highly_complex_password'
    

    然后在build.gradle中使用

      repositories {
          maven {
              url 'http://repo.mycompany.com/maven2'
              credentials {
              username 'user'
              password 'password'
          }
       }
      }
    

    或你可以在控制台使用-P输入login,'password'参数给properties设值。

      gradlew -Plogin=me -Ppassword=this_is_my_password assembleDebug
    

2.2 转换Eclipse Android项目到Android Studio

问题

早期都是使用Eclipse开发,现在想要使用Android Studio。

解决方法

Android Studio自带导入向导,根据向导一步一步做。

androidstudio_from_eclipse_project
androidstudio_from_eclipse_project

2.3 转换Eclipse Android项目到Android Studio通过Eclipse

问题

早期都是使用Eclipse开发,现在想要使用Android Studio。(推荐使用2.2方式)

解决方法

右键项目Export->Generate Gradle build files->选择这个项目下的所有library->finish

project_from_eclipse
project_from_eclipse

然后就会生成一个build.gradle

apply plugin: 'android'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':appcompat_v7')
}

android {
    compileSdkVersion 24
    buildToolsVersion "23.0.3"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

2.4 更新Gradle 版本

问题

根据需要更新Gradle版本

解决方法

写wrapper或修改gradle properties url。

  • 添加一个 wrappertask到build.gradle

      task wrapper(type: Wrapper) {
        gradleVersion = 2.2
      }
    

    修改版本后在控制台执行gradlew wrapper就可以使用新的gradlew版本。

  • 或修改gradle/wrapper 目录下的.properties

    uppdate_newer_gradle_version
    uppdate_newer_gradle_version

    更改相应的版本即可。

2.5 在不同项目直接共享设置

问题

在一个项目中有多个library项目,可以去除这些,modules重复的设置。

解决方法

  • 在顶层build.gradle中定义了allprojects节点

      allprojects {
          repositories {
              jcenter()
          }
      }
    

    果在单个项目中如果没有特殊情况则不需要重复定义仓库。

  • 使用subprojects

    由于gradle是多项目工程,如果使用subprojects则可以一起定义所有library项目设置。

      subprojects {
          apply plugin: 'com.android.library'
      }
    

    则所有library可以去掉apply plugin

2.6 签名APK包

问题

经过正式签名发布App到应用市场

解决方法

创建keystore,使用它签名APK。使用signingConfigs配置如下:

    android {
        // ... other sections ...
        signingConfigs {
            release {
                keyAlias 'my_alias'
                keyPassword 'password'
                storeFile file('/Users/kousen/keystores/myapp.keystore')
                storePassword 'password'
            }
        }
    }

然后在buildTypes中设置对应的签名

    android {
        // ... other sections ...
        buildTypes {
            release {
                // ... other settings ...
                signingConfig signingConfigs.release
            }
        }
    }

在控制台输入gradlew assembleRelease则会build一个签名包到/build/outputs/apk目录下。

2.7 使用Android Studio打包

androidstudio_build_release_apk.png
androidstudio_build_release_apk.png

如果没有keystore则根据向导创建。

第三章:gradle配置进阶

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,042评论 25 707
  • Android Studio正式版早已经发布了,默认使用Gradle构建,GitHub上80%的Android项目...
    流哲羽阅读 2,833评论 1 13
  • Google引入Gradle和Android Studio时,希望更容易的去重用代码、创建构造变体和配置、自定义构...
    sollian阅读 3,285评论 0 10
  • 失恋者说:“感情是美好的东西,但它却是最难通融的东西。所以对感情,如果你争取不到的话,最好而且也是最聪明的办法是当...
    心生六一阅读 1,492评论 1 27
  • 二六 感谢今天没有下雨 感谢车站的那位大哥 感谢今天遇到的所有人 愿我们的环境越来越正 记:不知道未来会发生什么,...
    XBIN阅读 244评论 0 0