Android SDK开发之生成AAR包、JAR包并生成本地&远程Maven仓库

本文详细介绍了如何在Android Studio中开发SDK,包括生成AAR包、JAR包,并将它们发布到本地及远程Maven仓库。通过配置gradle文件、解决集成异常和lambda问题,确保SDK的正确打包和使用。同时,还提供了生成Jar包和部署到GitHub仓库的步骤。

前言:公司开发离不开模块化和团队合作,我们经常会用到其他小伙伴开发好的Sdk,如果我们也想开发Sdk供别人使用,这就涉及到sdk的打包等过程。今天就抽空跟大家分享一下我在sdk打包过程中遇到的坑!

开发打包工具:AndroidStudio
仓库:Github

言归正传,我就直接进入Sdk的打包过程讲解(前提是在lib module的基础上,创建方式就不赘述了)

一.在Lib的gradle文件中加入apply plugin: 'maven'

二.建议在android节点下加入lintOptions { abortOnError false },可以忽略在打包过程的警告

三.在跟节点下加入生成本地Maven仓库的代码

uploadArchives{
    repositories.mavenDeployer{
		//生成本地仓库的地址
        repository(url:"file://D://myaar/repository/")
        // 唯一标识 如com.tencent.imLib(仅供参考)
        pom.groupId = "com.公司名.lib名"
        // 项目名称(socketLib)
        pom.artifactId = "socketLib"
        // 版本号
        pom.version = "1.0.0"
    }
}

四.在Terminal中执行命令gradlew uploadArchives

五.在第三步定义的文件夹下找到生成的aar文件和pom文件,上面地址为
D://myaar/repository/com.XXXX下面寻找aar包和pom文件

六.如果你的Sdk仅在本机供自己方便使用,就到此为止了。使用方式如下:

//主gradle文件下加入本地maven仓库地址(和上面的配置对应)
 maven{
            url 'file://D://myaar/repository/'
        }

//app的gradle下加入依赖(和上面配置对应,如:com.tencent.imLib.socketLib)
implementation 'com.公司名.lib名:项目名称:1.0.0'

七.接下来点击sync按钮,进行代码同步,一般就可以顺利集成我们的sdk了。我在集成的时候,出现了如下的异常,原因是我sdk中封装了socket可okhttp代码:

异常

java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of 'java.lang.invoke.LambdaMetafactory' appears in /apex/com.android.runtime/javalib/core-oj.jar)

原因:lamda表达式的问题

解决方案:在gradle文件下加入如下代码

compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }

至此为止,sdk包中的功能已经可以正常使用了。如果你还想深入了解jar包和远程maven仓库的生成,请继续往下看。

八.生成Jar包的方式(与Arr包的唯一区别是:Jar保重不包含资源文件,Arr可以将资源文件一起打包到sdk)

  1. 在lib的gradle文件下加入如下代码

    task makeJar(type: Copy) {
    //删除旧的jar包
    delete 'build/libs/jar包名称.jar'
    //原地址
    from('build/intermediates/packaged-classes/release/')
    //导出jar包的地址
    into('build/libs/')
    //包含的jar包
    include('classes.jar')
    //重命名jar包为mysdk
    rename ('classes.jar', 'jar包名称.jar')
    }
    makeJar.dependsOn(build)
    
  2. 点击AndroidStudio右侧的gradle选项,点击libmodule->tasks->other->MakeJar

  3. 接下来就会在lib下的build->libs文件夹下生成我们的sdk Jar包。

九.生成远程maven仓库

  1. 在github上新建仓库,并且克隆到本地

  2. 将第五步生成的本地仓库的文件拷贝到克隆的仓库文件下(从第五步中com文件夹开始拷贝

  3. 提交代码,更新到远程github仓库。

  4. 将如下模板拷贝到要集成sdk项目的根目录gradle文件下

    //如我的github仓库地址是
    https://github.com/XXX/mavenLib/tree/master/com/XX/XX/XX
    
    把github.com替换为raw.githubusercontent.com
    
    去掉master后面的内容  去掉tree字段
    
    最终要添加的代码为:
     maven
      {
       url "https://raw.githubusercontent.com/XXX/mavenLib/master"
      }
    
    
  5. 同第六步一样,在app的gradle文件夹下加入依赖implementation 'com.公司名.lib名:项目名称:1.0.0'

  6. sync同步

:terminal中查看依赖树代码:gradlew :module名称:Dependencies

结语:Sdk的打包过程其实并不难,只是在这个过程中会遇到各种各样的坑,有时一个小错误都可能让你崩溃。因此,细节决定成败!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值