Gradle打包可执行Jar和AAR
无    2017-09-08 22:40:51    1303    0    0
xianglijiaxing

生成JAR

为自己快速写博客开发的yami程序初稿基本完成了。需要打成jar通过命令行快速调用。具体可看Readme。

项目地址: https://github.com/lihongzheshuai/yami

搜了一下Gradle 打包executable jar的方法,确实如一个文章里所说,网上都会提到一个plugin,但是他试了却不好用,他好奇到底是谁转载谁的。

其实我也先试用了那个plugin,抱歉名字我记不住了,在那个plugin的主页上推荐了另外一个plugin:capsule

主页地址: https://github.com/danthegoodman/gradle-capsule-plugin

配置方式很简单,对于gradle 2.1后的版本,只需要在build脚本开通添加:

plugins { id “us.kirchmeier.capsule” version “1.0.2” }

老版本的话:

buildscript { repositories { maven { url “https://plugins.gradle.org/m2/” } } dependencies { classpath “us.kirchmeier:gradle-capsule-plugin:1.0.0” } }

apply plugin: “us.kirchmeier.capsule”

然后定义一个Task即可:

task simpleCapsule(type: FatCapsule){ applicationClass ‘com.foo.SimpleCalculator

baseName ‘SimpleCalculator’ }

最后通过执行simpleCapsule Task即可打出可执行的Jar。



http://www.jb51.net/article/121302.htm



 

生成AAR

        

只有module为Libray的才能生成AAR(Android Archives)

 

library module:

app module:

 

步骤:

 

Make完成后,在&{library module}/build/outputs/aar目录下会生成aar

 

如何引用AAR

项目根目录下的build.gradle中添加

allprojects {
    repositories {
        jcenter()
        maven { url 'http://maven.oschina.net/content/groups/public/' }
        flatDir {
            dirs 'libs' //this way we can find the .aar file in libs folder
        }
        maven {
            url 'https://maven.google.com'
        }
    }
    //skip Test tasks
    gradle.taskGraph.whenReady {
        tasks.each { task ->
            if (task.name.contains("Test"))
            {
                task.enabled = false
            }
        }
    }
}

 

module的build中引用方式compile (name;'aar name', ext:'aar')

 

 

发布一个AAR的注意事项

 

•修改Module(也就是生成aar的工程,我的是paysdk)里面的代码的时候,重新编译好之后,需要把引用aar项目当中的aar文件删掉,并且也需要删除掉build--intermediates--exploded-aar--paysdk,完了在重新同步

 

•避免创建内部接口

        因为当你发布aar时, 内部的接口在混淆后会独立成一个外部的接口Outer$InnerInterface.

 

•使用maven发布需要将所有依赖都发布到maven上

如果你发布多个aar, 每个aar互相依赖, 那么你需要将这些依赖都以maven的形式定义, 否则会在编译时, maven解析某个aar的pom时会报空指针异常.

maven的形式定义:

apply plugin: 'maven'
compile 'com.nineoldandroids:library:2.4.0+'

 

•res内定义的属性或者名称, 都应当加上前缀

你的aar里定义资源文件是很正常的事, 资源文件很有可能和别人的资源重名, 而悲剧的是, 别人很有可能是引用了另外一个aar导致与你重名. 他无法修改那个aar的资源名, 就像他不能修改你的aar资源名一样. 为了避免这种尴尬, 最好在定义的资源程前加上一个前缀, 比如你的模块简写,商标简写等等. 避免冲突, 还能打个广告, 何乐而不为.

 

•如果aar中也引用了第三方的lib,那么打包后的aar中是没有把这些三方库加入到aar中的,这样就需要在app中除了引用.aar外还要引用其中需要的其他第三方库。

 

 

 

上一篇: 原生系统下载地址

下一篇: 动态权限请求

1303 人读过
立即登录, 发表评论.
没有帐号? 立即注册
0 条评论
文档导航