将aar发布到github并在项目中引用

首先将我们准备的框架源码配置如下:
1、将app-build.gradle的apply plugin: 'com.android.application’修改成apply plugin: ‘com.android.library’,使我们的框架作为library;

2、将manifest中launcher去掉:

<intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

3、app-build.gradle中defaultConfig模块去掉applicationId,否则会报/Error:Library projects cannot set applicationId. applicationId is set to ‘com.vdolrm.lrmlibrary’ in default config.错误;

4、app-build.gradle根目录下写一句话:apply from: ‘maven-release-aar.gradle’,同时在此build.gradle的同目录下创建maven-release-aar.gradle文件;

build.gradle内容如下:

//apply plugin: 'com.android.application'
apply plugin: 'com.android.library'

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.2"

    defaultConfig {
        //applicationId "com.vdolrm.lrmlibrary"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1//每次升级时修改versionCode和versionName
        versionName "1.0.1"//每次升级时修改versionCode和versionName
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.soundcloud.android:android-crop:1.0.1@aar'
    compile 'com.ikimuhendis:ldrawer:0.1'
    compile 'com.google.code.gson:gson:2.5'
    compile 'cn.lightsky.infiniteindicator:library:1.0.5' exclude group: 'com.android.support'
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
    compile 'com.jiechic.library:xUtils:2.6.14'
}
//aar打包
apply from: 'maven-release-aar.gradle'

5、maven-release-aar.gradle文件内的代码如下:

// 1.maven-插件
apply plugin: 'maven'
// 2.maven-信息
ext {// ext is a gradle closure allowing the declaration of global properties
    PUBLISH_GROUP_ID = 'vdolrm.lrmlibrary'
    PUBLISH_ARTIFACT_ID = 'base'
    PUBLISH_VERSION = android.defaultConfig.versionName
}
// 3.maven-路径
uploadArchives {
    repositories.mavenDeployer {
        def deployPath = file(getProperty('aar.deployPath'))
        repository(url: "file://${deployPath.absolutePath}")
        pom.project {
            groupId project.PUBLISH_GROUP_ID
            artifactId project.PUBLISH_ARTIFACT_ID
            version project.PUBLISH_VERSION
        }
    }
}

//aar包内包含注释
task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.sourceFiles
}

artifacts {
    archives androidSourcesJar
}

6、在D盘根目录中创建mygit_lrmutils_organization_aar文件夹,作为生成的aar文件组的本地存储位置;

7、在github中新建 组织,create new-new organization,填写基本信息后生成.git地址https://github.com/vdolrm/lrmlibrary_aar.git。此处需要注意,create new有两个选项,new repository和new organization,此处务必要选择organization,虽然区别不大,但是假如选择repository的话不能够作为私有仓库导入到新项目(报Failed to resolve错误)

8、使用SourceTree克隆git地址https://github.com/vdolrm/lrmlibrary_aar.git到mygit_lrmlibrary_organization_aar文件夹,作为aar包的仓库配置;

9、在项目根目录的gradle.propertiese中添加一句话:

aar.deployPath=D:\\mygit_lrmutils_organization_aar
(mac:/Users/vdo/AndroidStudioProjects/lrmutils_aar_macgit)

把输出路径配置到本地;

10、点击studio下方Termial选项卡调出dos窗口模式,输入:

gradlew uploadArchives 
(mac:gradle uploadArchives 假如提示command not found详见10.1)

执行编译,成功后会生成aar文件和相应的加密文件以及pom文件,pom文件作为表单记录着本框架的所有依赖,在引用本框架时会自动从jcenter中一并下载。
第一次执行可能需要等待的时间比较长,大概几分钟左右,成功后在mygit_lrmlibrary_organization_aar文件夹中会生成一些文件,主要是aar文件和xml文件。

如果提示

ERROR: JAVA_HOME is set to an invalid directory: D:\Program Files\Android\Android Studio\jre;

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.

可以以管理员身份运行cmd切换到项目目录下再执行gradlew uploadArchives
(或mac : 编辑.base_profile
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home
PATH=“ J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH”
CLASSPATH=“ J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar”
export JAVA_HOME
export PATH
export CLASSPATH)

10.1 gradle环境变量配置:
mac:

1.从finder里边英文为[Applications],中文为[应用程序]去找到Android studio ,右键选择显示包内容,进入contents-gradle-gradle2.14.1-bin,点击gradle,显示简介。然后复制路径就得到了如上的路径;
(也可在系统默认存放gradle的目录下找,
打开目录/Users/vdo/.gradle/wrapper/dists,我们可以在里面找到很多gradle版本。这里都可以使用,但是建议使用项目最常用的gradle版本。)
2.打开终端,执行open .bash_profile,末尾追加
export GRADLE_HOME=/Applications/Android\ Studio.app/Contents/gradle/gradle-2.14.1
export PATH=${PATH}:${GRADLE_HOME}/bin
3.注意:因为复制后的链接中Android Studio.app中间有空格路径中不能带有空格之类的特殊字符。需要在空格前加\进行转意,如上 
保存退出,如果不能操作的话可以将.bash_profile复制粘贴一份,将原来的删除或者添加操作权限

4、最后用[source .bash_profile]命令使用修改后的

5、操作完成后使用命令[gradle -v]看是否出现版本号

11、在SourceTree中选中未提交的文件,把本地文件提交并推送到github。

至此,生成aar并上传到github完成。

第二部分:在新项目中引用私有仓库中的aar
1、在新项目根目录中build.gradle中添加如下代码:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
    }
}

allprojects {
    repositories {
        jcenter()
       // maven { url "file://D:/mygit_lrmutils_organization_aar" }//lrmlibrary本地organization库可以
       //maven { url "file:///Users/vdo/AndroidStudioProjects/lrmutils_aar_macgit"}//mac
        maven { url "https://github.com/vdolrm/lrmutils_aar/raw/master"}//lrmlibrary
		//假如第7步选择的是new repository的话这里的引用就会一直报错
//经验证:新项目使用gradle-2.4-all可以使用web方式引入,大于2.4时会找不到资源,原因暂未知
    }
}

maven库可以以本地仓库和远程仓库作为引用地址,上面两种方式都可以,但推荐使用远程方式。
需要注意的是,新建organization时并没有带/raw/master路径,但这里需要携带/raw/master才可成功引入,原因暂不可知。

2、在新项目app-build.gradle中编写一下信息:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'vdolrm.lrmutils:base:1.0.3' exclude group: 'com.android.support'//应用格式: packageName(group_id):artifactId:version,这里的格式即为第5步配置mygit_lrmlibrary_organization_aar文件时填写的【PUBLISH_GROUP_ID:PUBLISH_ARTIFACT_ID:PUBLISH_VERSION】
}

即可。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值