8月13日

Android打包流程

打包流程包括包含四步骤

  1. 通过aapt工具打包res资源文件,生成R.java,resources.arsc和res文件
  2. 处理.aidl文件,生成对应的java接口文件
  3. 通过java compiler编译R.java, java接口文件,java源文件,生成.class文件
  4. 通过dex命令,将.class文件和第三方库的.class文件处理称classes.dex
  5. 通过apkbuilder工具,将Dex文件,res资源合并成一个APK
  6. 通过jarsinger工具,为APK进行签名
  7. 通过zipalign工具进行apk的对齐优化

自定义Gradle插件

  1. 创建一个module,无论phone还是Android Library,因为后面会删掉大部分文件
  2. 删除module下的文件及文件夹,只保留空的src/main目录及build.gradle文件
  3. 创建groovy文件夹,定义包名。如java项目一样
  4. 创建一个类MyPlugin.groovy
  5. 在build.build中加入groovy引用和用于上传的maven的引用
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    apply plugin: 'groovy'
    apply plugin: 'maven'

    dependencies {
    //gradle sdk
    compile gradleApi()
    //groovy sdk
    compile localGroovy()
    }

    repositories {
    mavenCentral()
    }
    group = 'com.zyx.plugin'
    version = '1.0.0'

    uploadArchives {
    repositories {
    mavenDeployer {
    //提交到远程服务器:
    // repository(url: "http://www.xxx.com/repos") {
    // authentication(userName: "admin", password: "admin")
    // }
    //本地的Maven地址设置为D:/repos
    repository(url: uri('/Users/zhengyangxin/StudioProjects/myProject/LibraryCollection/pluginrepos'))
    }
    }

    }
  6. 插件已经编好,接着需要告诉gradle我们定义了哪个插件,需要创建文件src/main/resources/META-INF/gradle-plugins/XXXX.properties, 这里的XXXX就是外部module引用的名称,在这里我们定义为com.zyx.plugin.properties
    1
    apply plugin: 'com.zyx.plugin'
  7. 然后在XXXX.properties指明我们定义的插件
    1
    implementation-class=com.hc.plugin.MyPlugin
  8. 最后可以进行打包一个plugin在本地,通过定义的uploadArchives Task
  9. 在需要的modlue中引用自定义的plugin
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    apply plugin: 'com.zyx.plugin'

    buildscript {
    repositories {
    maven {//本地Maven仓库地址
    url uri('/Users/zhengyangxin/StudioProjects/myProject/LibraryCollection/pluginrepos')
    }
    }
    dependencies {
    //格式为-->group:module:version
    classpath 'com.zyx.plugin:plugin:1.0.0'
    }
    }