美文网首页
Android aar与jar打包

Android aar与jar打包

作者: mumuxi_ | 来源:发表于2020-08-12 23:23 被阅读0次

目录
一、AAR包与JAR包的区别
二、AAR包、JAR包打包步骤
三、AAR打包需要注意的地方

欢迎评论留言,文章持续更新优化

一、AAR包与JAR包的区别

aar包含所有资源,class,xml布局文件以及res资源文件全部包含。注意是全部。
jar只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件。

二、AAR包、JAR包打包步骤

1.首先新建一个library

File->New->New Module

选择Android Library

2.生成aar与jar

aar生成路径:build/outputs/aar/

jar包生成路径,不同AndroidStudio版本可能不一样:

  • build/intermediates/bundles/release/
  • build/intermediates/packaged-classes/release

3.把aar复制到想要复制的位置并重命名

//copy生成的原aar到指定路径并修改名称
task makeAar(type: Copy) {
    //aar生成的路径,这里有可能有变化
    System.println("makeAar")
    from('/build/outputs/aar/')
    into('release')
    include('konkanlp-release.aar')
    rename('konkanlp-release.aar', 'konkanlp-' + gitCurrentTag + '.aar')
}
makeAar.dependsOn(build)

//copy生成的原class.jar到指定路径并修改名称
task makeJar(type: Copy) {
    //classes.jar生成的路径,这里有可能有变化
    System.println("makeJar")
    from('build/intermediates/packaged-classes/release/')
    into('release')
    include('classes.jar')
    rename('classes.jar', 'konkanlp-' + gitCurrentTag + '.jar')
}
makeJar.dependsOn(build)

build.doLast {
    makeAar
    makeJar
}

gradle.projectsEvaluated {
    assembleRelease.doLast {
        //复制aar并重命名,下面是指定原aar生成的路径,原aar通过执行assembleRelease 任务或者build可生成
        File aarDir = new File(project.buildDir, "/outputs/aar")
        File[] aar = aarDir.listFiles()
        if (aar.length > 0) {
            for (File file : aar) {
                if (file.name.endsWith("aar")) {
                    System.println("apk:" + file.name)
                    delete("$rootDir/app/libs")
                    copy {
                        from file
                        //直接复制到demo里面
                        into "$rootDir/app/libs"
                        rename(file.name, "konkanlp-release.aar")
                    }

                    copy {
                        from file
                        into "$rootDir/konkanlp/release"
                        rename(file.name, "konkanlp-" + gitCurrentTag + ".aar")
                    }
                }
            }
        }
        //复制jar并重命名
        File jarDir = new File(project.buildDir, "/intermediates/packaged-classes/release")
        File[] jar = jarDir.listFiles()
        if (jar.length > 0) {
            for (File file : jar) {
                if (file.name.endsWith("jar")) {
                    System.println("apk:" + file.name)
                    copy {
                        from file
                        into "$rootDir/konkanlp/release"
                        rename(file.name, "konkanlp-" + gitCurrentTag + ".jar")
                    }
                }
            }
        }
    }
}

4.aar与jar引用

implementation project(':youaarlibrary')//既可以直接依赖开发

implementation (name: 'youaarlibrary-release', ext: 'aar')//也可以添加aar方式开发

implementation files('libs/jar包名称.jar')

三、AAR打包需要注意的地方

1、原有项目所依赖的jar包会被正常打包进aar中,但原项目依赖的aar则不会打包进aar

1.1以外部compile形式所依赖的包,也不会被打包进aar,就是aar内引用的第三方库
例:aar类库中包含远程依赖volley, 此时按照如上方法打包出的aar,在目标工程中是无法调用volley使用的
compile 'com.mcxiaoke.volley:library:1.0.19'
解决方法:

1.2.记得不要重复引用,避免壳工程引用的jar与打包好的aar冲突,就是要必要引用jar包冲突

2、 声明具体支持的so库类型

暂未接触到,后续补充

3、需要做混淆(jar包的打包也要做混淆)

aar包也可以指定混淆方式,在提供给对方时,我们需要将代码混淆,在厂商发布时,也需要混淆,这样就存在二次混淆后,AAR包找不到相应类的问题。
解决方法可以让厂商在二次混淆时,keep住我们aar相关代码

混淆参考:
Android 混淆介绍
第三篇:AAR 混淆
androidStudio 打包与混淆

4、路径获取

留意相关路径的获取,在普通的Appliaction中,数据默认存储在 /data/data/packageName/中,当aar内嵌在其他应用中,存储路径跟随主工程, 在获取数据时路径切记不能写死

5、第三方登录

因为微信微博等三方登录需要使用PackageName申请APPID,APPKEY, 需要使用壳工程的packageName。

6、常见BUG

6.1主项目需要依赖AAR中所依赖的远程库,否则会出现ClassNotFound异常
这里也许某个依赖库你们的版本会发生冲突,这就需要你们协调了。

6.2 jar包引用重复

6.3 资源或布局找不到
资源和布局文件命名最好统统加上你的项目名字前缀,比如图片资源、string、color、dimens、layout等等,反正res目录下所有文件最好都使用统一的加前缀命名,防止跟宿主app下的资源重复,因为aar引用跟源码引用起到的效果一样一样的,所有很容易出现资源重复引用的问题,所以加上前缀非常有必要

拓展:成型的项目(有依赖)如何快速打包AAR

将原先module下的Application改为Library,正常调用assembleDebug 或 assembleRelease时就会在该module下的build/output目录下生成aar文件。

1.模块是library不是 application
//apply plugin: 'com.android.application'
apply plugin: 'com.android.library'

2.注释掉 applicationId
// applicationId "com.cmcc.iot.gatewaycloud"

3.manfiest文件修改,去掉applicationname属性和以下内容
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/ColorTranslucentTheme"

相关文章

网友评论

      本文标题:Android aar与jar打包

      本文链接:https://www.haomeiwen.com/subject/hwsvdktx.html