首页 优德88下载正文

峰峰信息港,了解Android打包编译的流程-优德88手机客户端

admin 优德88下载 2019-07-11 195 0

从事Android高档研制,怎能不知道Android的打包流程呢?

今日就为咱们解说Android打包的流程:

Android 构建体系编译运用资源和源代码,然后将它们打包成可测验、布置、签署和分发的 APK。

一般运用 Android Studio开发的时分运用Gradle构建东西包来主动履行和办理构建流程,一起也能够灵敏地自界说构建装备。

Gradle 和 Android 插件独立于 Android Studio 运转。所以咱们能够在 Android Studio上或许核算机上的命令行构建 Android 运用。 假如您不运用 Android Studio,能够学习怎么从命令行构建和运转您的运用,终究构建的输出都相同。

在了解Android打包流程之前,我建议您能够先检查一个apk包内容,能够知道它里边都有哪些文件组成:

  • AndroidManifest.xml 程序大局装备文件
  • classes.dex Dalvik字节码
  • resources.arsc 资源索引表, 解压缩resources.ap_就能看到
  • res\ 该目录寄存资源文件(图片,文本,xml布局)
  • assets\ 该目录能够寄存一些装备文件
  • src\ java源码文件
  • libs\ 寄存运用程序所依靠的库
  • gen\ 编译器依据资源文件生成的java文件
  • bin\ 由编译器生成的apk文件和各种依靠的资源
  • META-INF\ 该目录下寄存的是签名信息

知道了apk包体的内容,咱们应该会更好的了解Android打包流程:



以上流程中咱们能够看到:

  • 编译器将源代码转化成 DEX(Dalvik Executable) 文件(其间包含 Android 设备上运转的字节码),将一切其他内容转化成已编译资源。
  • APK 打包器将 DEX 文件和已编译资源兼并成单个 APK。 不过,有必要先签署 APK,才能将运用装置并布置到 Android 设备上
  • APK 打包器运用调试或发布密钥库签署APK。

留意:

1、假如咱们构建的是debug版别的运用,打包器会运用调试密钥库签署运用。 Android Studio 主动运用调试密钥库装备新项目。

2、假如构建的是计划向外发布的发布版别运用,打包器会运用发布密钥库签署运用。

3、在生成终究 APK 之前,打包器会运用 zipalign 东西对运用进行优化,削减其在设备上运转时占用的内存。

要点:

如上面的流程所示,是典型 Android 运用模块的构建流程,但假如看的更详尽一点它的流程应该如下:

  • AAPT(Android Asset Packaging Tool)东西,Android资源打包东西。会打包资源文件(res文件夹下的文件),并生成R.java和resources.arsc文件。
  • AIDL东西会将一切的.aidl文件编译成.java文件。
  • JAVAC东西将R.java、AIDL接口生成的java文件、运用代码java文件编译成.class文件。
  • dex脚本将许多.class文件转化打包成一个.dex文件。
  • apkbuilder脚本将资源文件和.dex文件生成未签名的.apk文件。
  • jarsigner对apk进行签名。

这些构建中运用的东西或许脚本,在SDK的build-tools或许tools下能够找到

具体的流程图如下:



这样就Android打包的流程就明明白白了。

gradle的装备意义

Androidstudio 会与Android Plugin for Gradle 这个构建东西包协作,当咱们在Androidstudio创立一个运用的时分,它会协助咱们创立自界说构建装备 build.gradle 文件,这个文件里的内容需求咱们自己进行一些简略的更改。 这些纯文本文件运用域特定言语 (DSL) 以 Groovy 言语描绘和操作构建逻辑,其间 Groovy 是一种适用于 Java 虚拟机 (JVM) 的动态言语。 无需了解 Groovy 便可开端装备构建,因为 Android Plugin for Gradle 引进咱们开发需求的大多数 DSL 元素



如图,是咱们工程中文件层级,现在咱们来讲讲每个层级gradle的文件意义:

  • settings.gradle 工程设置Gradle,文件坐落项目根目录,用于指示 Gradle 在构建运用时应将哪些模块包含在内。 对大多数项目而言,该文件很简略,只包含以下内容:
  • include ‘:app’
  • 不过,多模块项目需求指定应包含在终究构建之中的每个模块
  • project build.gradle 是尖端构建文件, 坐落项目根目录,用于界说适用于项目中一切模块的构建装备。 默许状况下,此尖端构建文件运用 buildscript 代码块来界说项目中一切模块共用的 Gradle 存储区和依靠项。 以下代码示例描绘的默许设置和 DSL 元素可在新建项目后的尖端 build.gradle 文件中找到。
buildscript {
buildscript块是Gradle自身装备存储库和依靠项的当地——也就是说,这儿不该该包含模块的依靠项。例如,这个块包含了Gradle的Android插件作为一个依靠项,因为它供给了Gradle构建Android运用程序模块所需的额定指令。
repositories {
google()
jcenter()
}
dependencies 块装备Gradle需求运用的依靠项来构建项目。下面的代码行增加了Gradle的Android插件版别3.3.2作为类途径依靠项。
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
}
}
allprojects块是装备项目中一切模块(如第三方插件或库)运用的存储库和依靠项的当地。可是,你应该在每个模块等级的构建中装备特定于模块的依靠项。gradle文件。关于新项目,Android Studio默许包含JCenter和谷歌的Maven存储库,但它不装备任何依靠项(除非您挑选了一个需求的模板)
allprojects {
repositories {
google()
jcenter()
}
}

关于包含多个模块的 Android 项目,在项目等级界说某些特点,并在一切模块间同享这些特点可能会十分有用。 为此,您能够将 额定特点增加到尖端 build.gradle 文件的 ext 代码块中。

buildscript {...}
allprojects {...}
// 这个块封装了自界说特点,使它们对项目中的一切模块都可用。
ext {
//下面仅仅能够界说的特点类型的几个示例。
compileSdkVersion = 28
// You can also create properties to specify versions for dependencies.
// Having consistent versions between modules can avoid conflicts with behavior.
supportLibVersion = "28.0.0"
...
}
...

要从相同项目中的模块拜访这些特点,请在模块的 build.gradle 文件(您能够在以下部分了解有关此文件的具体信息)中运用以下语法。

android {
// 运用以下语法拜访在项目等级界说的特点:
// rootProject.ext.property_name
compileSdkVersion rootProject.ext.compileSdkVersion
...
}
...
dependencies {
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
...
}
  • module build.gradle是模块级构建文件
  • 模块级 build.gradle 文件坐落各 project/module/ 目录中,用于装备适用于其地点模块的构建设置。 你能够经过装备这些构建设置来供给自界说打包选项(例如附加构建类型和产品风格),以及替换 main/ 运用清单或尖端 build.gradle 文件中的设置。

此 Android 运用模块 build.gradle 文件示例归纳您应了解的某些根本 DSL 元素和设置。

//构建装备中的榜首即将Gradle的Android插件运用于此构建,并使Android块可用来指定特定于Android的构建选项。
apply plugin: 'com.android.application'
android块是装备一切android特定构建选项的当地。
android {
compileSdkVersion指定了Gradle应该运用的Android API等级来编译你的运用程序。这意味着你的运用程序能够运用这个API等级或更低的API特性。
compileSdkVersion 28
buildToolsVersion指定了用于构建运用程序的SDK构建东西、命令行实用程序和编译器的版别。需求运用SDK办理器下载构建东西。此特点是可选的,因为插件默许运用构建东西的引荐版别。
buildToolsVersion "28.0.3"
defaultConfig块封装了一切构建变体的默许设置和条目,而且能够从构建体系动态地掩盖main/AndroidManifest.xml中的一些特点。你能够装备产品口味来掩盖运用程序不同版别的这些值。
defaultConfig {
applicationId专一地标识要发布的包。可是,咱们的源代码依然应该引证主/AndroidManifest.xml文件中的package特点界说的包名。
applicationId 'com.example.myapp'
界说运转运用程序所需的最低API等级。
minSdkVersion 15
指定用于测验运用程序的API等级。
targetSdkVersion 28
界说运用程序的版别号。
versionCode 1
为您的运用程序界说一个用户友爱的版别称号。
versionName "1.0"
}
您能够在buildTypes块中装备多个构建类型。依据efault,构建体系界说了两种构建类型:debug和release。调试构建类型在默许的构建装备中没有显式显现,可是它包含调试东西,并运用debug键进行签名。release构建类型运用Proguard设置,默许状况下不签名。
buildTypes {
默许状况下,Android Studio运用minifyEnabled装备release build类型来启用代码缩短,并指定Proguard设置文件。
release {
minifyEnabled true // Enables code shrinking for the release build type.
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
能够在productflavor块中装备多个产品口味。这答应您创立运用程序的不同版别,这些版别能够用自己的设置掩盖defaultConfig块。产品风味是可选的,默许状况下构建体系不会创立它们。这个比方创立了一个免费且付费的产品风格。然后,每种产品都指定了自己的运用程序ID,这样它们就能够一起存在于谷歌Play Store或Android设备上。假如您声明产品的风味,您还有必要声明风味维度,并将每种风味分配给风味维度。
flavorDimensions "tier"
productFlavors {
free {
dimension "tier"
applicationId 'com.example.myapp.free'
}
paid {
dimension "tier"
applicationId 'com.example.myapp.paid'
}
}
在split块中,您能够装备不同的APK构建,每个构建只包含支撑屏幕密度或的代码和资源versionCode不同。
splits {
依据屏幕密度设置构建多个apk。
density {
启用或禁用构建多个apk
exclude "ldpi", "tvdpi", "xxxhdpi", "400dpi", "560dpi"
}
}
}
模块级构建装备文件中的dependencies块指定仅构建模块自身所需的依靠项。要了解更多信息,请增加构建依靠项。
dependencies {
implementation project(":lib")
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation fileTree(dir: 'libs', include: ['*.jar'])
}
  • Gradle 特点文件,Gradle 还包含两个特点文件,均坐落项目根目录中,可用于指定适用于 Gradle 构建东西包自身的设置:

gradle.properties

您能够在其间装备项目规模 Gradle 设置,例如 Gradle 后台进程的最大堆巨细。如需了解具体信息,请参阅构建环境。

local.properties

为构建体系装备本地环境特点,例如 SDK 装置途径。 因为该文件的内容由 Android Studio 主动生成而且专用于本地开发者环境,所以不该手动修正该文件,或将其归入您的版别控制体系。

以上就是Android打包流程中需求了解的常识。这些常识对咱们了解一些比较深化的功用仍是很有优点的,比方热更新,比方插件化,比方多渠道打包,一起在平常的开发过程中对打包编译的装备文件gradle很熟悉,能够大大进步开发的功率,乃至能够自己开发一些小的脚本协助自己进步工作功率。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

喜欢你没道理,安福文旅交融神韵浓-优德88手机客户端

  • 阿里巴巴股价,Fortress Capital被禁五年 不合法协助外汇交易者躲避美国法规-优德88手机客户端

    阿里巴巴股价,Fortress Capital被禁五年 不合法协助外汇交易者躲避美国法规-优德88手机客户端

  • 排卵期出血,大市剖析:港股四连跌 支撑区正受检测-优德88手机客户端

    排卵期出血,大市剖析:港股四连跌 支撑区正受检测-优德88手机客户端

  • 优德88中文版_优德88娱乐场_w88优德官方资讯网

    优德88中文版_优德88娱乐场_w88优德官方资讯网

  • w88优德手机版_优德888官网手机版_优德88官方网站手机版下载

    w88优德手机版_优德888官网手机版_优德88官方网站手机版下载

  • 优德88免费送注册体验金_优德w88娱乐下载_优德w88娱乐城最新优惠

    优德88免费送注册体验金_优德w88娱乐下载_优德w88娱乐城最新优惠

  • 火影忍者究极风暴,中国长城9月20日快速上涨-优德88手机客户端

    火影忍者究极风暴,中国长城9月20日快速上涨-优德88手机客户端

  • 如月群真,本周甲醛市场行情上涨(9.16-9.20)-优德88手机客户端

    如月群真,本周甲醛市场行情上涨(9.16-9.20)-优德88手机客户端

  • 最近发表

      优德88手机客户端_w88优德_w88

      http://www.hongshengqp.com/

      |

      Powered By

      使用手机软件扫描微信二维码

      关注我们可获取更多热点资讯

      w88出品