`
becherpan
  • 浏览: 6126 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Android Studio的Android build system详解

 
阅读更多

Android build system in AS

Android Studio使用Gradle来管理和编译Android工程,而为了生成Android应用衍生出了Android build system。Android build system就是用来构建、测试、运行还有打包app的一套工具,这里我们将具体了解Android build system。

 

Build Process--构建的流程

首先我们要对Android build system的总体行为有所了解。在Android Studio中生成apk文件需要运行Gradle build任务,这时会完整走一遍Build(构建)流程,这个流程包含了很多工具和步骤,期间还会生成过渡文件。
下图可以说明一个完整的构建流程: 

  可以归结为以下几步

  • Android Asset Packaging Tool,也就是常说的aapt把资源文件进行编译(例如AndroidManifest.xml和Activity用的xml文件),同时生成的还有R.java。R.java相当于资源文件的索引,在java代码中就是通过R.java引用资源文件的。
  • aidl tool将.aidl接口转化为java接口
  • 所有的Java代码,包括R.java和.aidl生成的java接口代码,都被编译成.class文件
  • dex tool将.class文件转化为Dalvik二进制代码.dex。所有的第三方库和.class文件也会被转化为.dex文件
  • 所有文件,包括未编译资源、编译资源、dex文件,都由apkbuilder tool包装到apk文件中。
  • apk生成后需要用debug key或 release key签名才能安装到设备中。
  • 如果要发布apk,还需要使用zipalign工具使apk文件对齐
*注意:build system会合并所有资源,资源的可能来自默认资源目录app/src/main/res和dependencies指向的库,也可能受product flavors和build types的影响。如果不同来源的资源重名,则根据以下优先级,使用优先级最高的资源:dependencies > product flavors > build types > 默认资源目录

 

Build Configuration--Build配置

我们已经对Build有了一个整体的了解,但如果想要对Build任务做些修改,例如添加一个库,该怎么做呢?这就需要学习Build的配置了。
Android Studio工程有一个主配置文件,而工程下属的module也都各自有配置文件,他们的名称都是build.gradle,大多数情况下我们只需要编辑module下的build.gradle。
假如我们有一个名为app的module,app的build.gradle文件如下:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile project(":lib")
    compile 'com.android.support:appcompat-v7:19.0.1'
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

我们一起来看看这份配置是怎么一回事:

  • apply plugin: 'com.android.application' 将名为com.android.application的插件应用到这个module。
    实际上,这相当于做了一个声明,com.android.application表明这是一个Android 应用的build,也可以使用com.android.library表示一个library,或者java表示一个java工程。有了这个声明,build system才能接受这个build,同时此build任务会被加入到主build任务,而接下来的 android {...} 元素中的Android相关build选项也才变得可用。
  • android {...} 元素能配置所有build选项
    • compileSdkVersion 指定编译应用的sdk版本
    • buildToolsVersion 指定build tools的版本(build tools的主版本号应该不低于compileSdkVersion以及targetSdk);
    • defaultConfig 会影响一些关键配置,以及manifest文件中的条目,出现在defaultConfig中的条目会覆盖manifest文件的;
    • buildTypes build类型元素控制应用的build和打包,默认情况下有debug和release两种build类型:debug类型的应用包带有debug标签,而且被签名为debug key;release build 类型没有默认签名,要想生成必须要有指定的key
  • dependencies 声明了此module的依赖关系,后面将单独用一个小结来说明dependencies

 

Dependencies

下面这段代码用到了所有三种依赖:

dependencies {
    // Module dependency
    compile project(":lib")

    // Remote binary dependency
    compile 'com.android.support:appcompat-v7:19.0.1'

    // Local binary dependency
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

Module dependencies

第一个compile project(":lib")是模块依赖,表示模块app依赖于模块lib。当app被build时,build system会把lib也包含进来。

Remote binary dependencies

接下来的是远程库依赖,compile 'com.android.support:appcompat-v7:19.0.1' 表示模块app依赖Maven库中版本为19.0.1的Android Support Library。默认情况下,远程库指向Maven中心库(Maven Central Repository)。

Local binary dependencies

最后的compile fileTree(dir: 'libs', include: ['.jar']) 表示本地库依赖。 一般而言,我们把本地库的jar文件放到模块的 libs 文件夹里,然后用compile fileTree(dir: 'libs', include: ['.jar'])告诉build system所有在libs下的jar文件都要被编译并且被包含进应用中。

  • 大小: 103.3 KB
分享到:
评论

相关推荐

    Android Studio 配置与使用

    ### Android Studio 配置与使用详解 #### 一、Android Studio 基本SDK配置 在开始使用 Android Studio 进行应用开发之前,一个重要的准备工作就是配置好 Android SDK。这通常包括选择合适的 API 级别、安装必要的...

    android studio 引入so

    ### Android Studio 中正确引入与使用 `.so` 文件详解 在Android开发过程中,有时我们需要使用到本地代码(Native Code),即C或C++编写的代码来实现一些Java层难以完成的功能或者为了性能优化的目的。这就涉及到了...

    shenmaTV for Android studio.zip

    《神马TV for Android Studio:源码解析与对接CMS详解》 在移动互联网时代,视频流媒体服务已经成为人们日常生活中不可或缺的一部分。神马TV作为一款流行的Android应用,为用户提供便捷的在线视频观看体验。本文将...

    Android Studio 生成自定义jar包的步骤详解

    Android Studio 生成自定义jar包的步骤详解 Android Studio 是一个功能强大且流行的 Android 集成开发环境(IDE),它提供了许多实用的功能来帮助开发者快速开发和维护 Android 应用程序。其中,生成自定义 jar 包...

    详解AndroidStudio3.0开发调试安卓NDK的C++代码

    AndroidStudio 3.0 开发调试安卓 NDK 的 C++ 代码详解 AndroidStudio 3.0 是一个功能强大且流行的集成开发环境(IDE),它提供了许多功能强大的工具和插件来帮助开发者快速开发和调试安卓应用程序。在 Android...

    android studio NDK例子

    Android Studio NDK例子详解 Android Studio NDK是一个用于在Android平台上进行原生代码开发的工具集,它允许开发者使用C、C++等语言编写部分或全部应用,从而利用硬件的性能优势并提升运行效率。本示例库"android-...

    Android studio配置创建JNI 安卓工程

    ### Android Studio 配置创建 JNI 安卓工程详解 #### 一、前言 随着移动应用的不断发展,原生性能优化成为了许多应用提高用户体验的重要手段之一。而在Android平台上,使用JNI(Java Native Interface)来调用C/C++...

    Android studio jni如何集成第三方库文件

    ### Android Studio JNI集成第三方库文件详解 #### 一、引言 随着移动互联网技术的不断发展,Android 应用开发越来越受到开发者的青睐。而在实际应用开发过程中,有时我们需要调用性能更为优秀的 C 或 C++ 代码来...

    androidstudio编译c++为.so文件

    ### Android Studio 编译 C++ 为 .so 文件详解 #### 概述 在 Android 开发过程中,有时候我们需要使用 C++ 代码来实现一些性能密集型的功能,这时候就需要借助 Java Native Interface (JNI) 和 Native Development...

    Android SDK (SDK Platforms)-android-34-ext8.zip

    **Android SDK详解** Android SDK(Software Development Kit)是Google提供的一套工具,用于帮助开发者创建、调试和发布Android应用。它包括了多个组成部分: 1. **SDK Platforms**:这些是Android操作系统各个...

    Android Studio常用功能介绍

    ### Android Studio 常用功能详解 #### 一、概览 Android Studio 是谷歌推出的官方集成开发环境(IDE),主要用于Android应用的开发。它基于IntelliJ IDEA,并且集成了许多高级特性,使得开发者能够更加高效地进行...

    详解Android Studio如何导入第三方类库、jar包和so库

    Android Studio 导入第三方类库、jar 包和 so 库详解 Android Studio 是 Android 应用程序开发的官方 IDE,它提供了许多功能强大的工具和插件,帮助开发者快速开发高质量的应用程序。然而,在实际开发中,我们经常...

    Android SDK (SDK Platforms)-android-25.zip

    《Android SDK (SDK Platforms) - android-25详解》 Android SDK(Software Development Kit)是开发者构建、调试和发布Android应用程序的重要工具集。在本文中,我们将深入探讨Android SDK中的"SDK Platforms"-...

    Calculator-Android:Android Studio的应用

    【Calculator-Android: Android Studio 应用开发详解】 在Android应用开发领域,Android Studio是官方推荐的集成开发环境(IDE),它提供了丰富的功能和工具,让开发者能够高效地构建高质量的Android应用程序。本...

    android libusb 已经成功编译拿去能用

    最后,通过`System.loadLibrary("libusb")`加载编译好的libusb库。 8. **测试与调试**:编写Android应用的USB功能,连接USB设备并测试你的libusb接口是否正常工作。如果遇到问题,可以使用NDK的日志输出功能进行...

    android 收音机 FM 驱动 hal层 框架层以及应用层代码

    android 收音机 FM 驱动 hal层 框架层以及应用层代码 方法一 不需要framework部分 1.fm放到 \hardware\rk2x 2.FmRadio 放到 packages\apps 3.hardware\libhardware\include\hardware\fm.h 放到hardware\libhardware...

Global site tag (gtag.js) - Google Analytics