第一步:在项目中的build.gradle文件中将
apply plugin: 'com.android.application'
改为
apply plugin: 'com.android.library'
同时将applicationId删除,这样Module就成了一个lib库
第二步:在lib中的build.gradle中添加生成jar包的task任务
方式一:
def SDK_BASENAME = "Sdk";//打包后名字
def SDK_VERSION = "_V1.0";//${defaultConfig.versionName}
def sdkDestinationPath = "build";//保存目录
def zipFile = file('build/intermediates/bundles/release/classes.jar')
task deleteBuild(type: Delete) {//删除jar包
delete sdkDestinationPath + "/" + SDK_BASENAME + SDK_VERSION + ".jar"
}
task makeJar(type: Jar) {//生成jar
from zipTree(zipFile)
from fileTree(dir: 'src/main', includes: ['assets/**'])
baseName = SDK_BASENAME + SDK_VERSION
destinationDir = file(sdkDestinationPath)//目的地
}
makeJar.dependsOn(deleteBuild, build)
//在终端执行生成JAR包
// gradlew makeJar
方式二:
def SDK_BASENAME = "Sdk";//打包后名字
def SDK_VERSION = "_V1.0";//${defaultConfig.versionName}
def SDK_NAME = SDK_BASENAME + SDK_VERSION + ".jar";
//Copy类型
task makeJar(type: Copy) {
//删除存在的
delete 'build/libs/' + SDK_NAME
//设置拷贝的文件
from('build/intermediates/bundles/release/')
//打进jar包后的文件目录
into('build/libs/')
//将classes.jar放入build/libs/目录下
//include ,exclude参数来设置过滤
//(我们只关心classes.jar这个文件)
include('classes.jar')
//重命名
rename('classes.jar', SDK_NAME)
}
makeJar.dependsOn(build)
//在终端执行生成JAR包
//gradlew makeJar
方式三:
task clearJar(type: Delete) {
delete 'libs/sdk.jar'
}
task makeJar(type: org.gradle.api.tasks.bundling.Jar) {
//指定生成的jar名
baseName 'sdk'
//从哪里打包class文件
from('build/intermediates/classes/debug/org/cmdmac/cloud/pluginsdk/')
//打包到jar后的目录结构
into('build/libs/')
//去掉不需要打包的目录和文件
exclude('test/', 'BuildConfig.class', 'R.class')
//去掉R$开头的文件
exclude { it.name.startsWith('R$'); }
}
makeJar.dependsOn(clearJar, build)
//在终端执行生成JAR包
//gradlew makeJar
方式四:
def SDK_BASENAME = "Sdk";//打包后名字
def SDK_VERSION = "_V1.0";//${defaultConfig.versionName}
def SDK_NAME = SDK_BASENAME + SDK_VERSION + ".jar";
def zipFile = file('build/intermediates/bundles/release/classes.jar')
def sdkDestinationPath = "build/libs/";//保存目录
task makeJar(type: Jar) {//生成jar
delete 'build/libs/' + SDK_NAME
from zipTree(zipFile)
from fileTree(dir: 'src/main', includes: ['assets/**'])
from(project.zipTree('libs/xutils-3.3.4.jar'))
from(project.zipTree('libs/glide-3.7.0.jar'))
from(project.zipTree('libs/xutils-3.3.4.jar'))
baseName = SDK_BASENAME + SDK_VERSION
destinationDir = file(sdkDestinationPath)//目的地
}
makeJar.dependsOn(build)
第三步:在Terminal工具中执行下面命令
gradlew :test:clean :test:makeJar //:tset表示lib库名称,这种写法是指定lib库生成jar
gradlew makeJar //这种是将项目中的lib库生成jar。(对项目中的所有有makeJar任务的lib都有效)
如果需要同时将资源文件也打进去的话,则要在以上四种方法中添加
from fileTree(dir: 'src/main', includes: ['res/**'])
即按第一种方式来说就是:
def SDK_BASENAME = "xxx_sdk";//打包后名字
def SDK_VERSION = "_V1.0";//${defaultConfig.versionName}
def sdkDestinationPath = "build";//保存目录
def zipFile = file('build/intermediates/bundles/default/classes.jar')
task deleteBuild(type: Delete) {//删除jar包
delete sdkDestinationPath + "/" + SDK_BASENAME + SDK_VERSION + ".jar"
}
task makeJar(type: Jar) {//生成jar
from zipTree(zipFile)
from fileTree(dir: 'src/main', includes: ['assets/**'])
from fileTree(dir: 'src/main', includes: ['res/**'])
baseName = SDK_BASENAME + SDK_VERSION
destinationDir = file(sdkDestinationPath)//目的地
}
makeJar.dependsOn(deleteBuild, build)
这样打出的jar包中就包含了资源文件,然后在依赖的lib目录build\outputs\aar下找到资源引用文件release.aar文件。
在新项目中引入jar时,将新打出的jar复制到新项目中的lib下,添加依赖即可,同时需要引用资源文件,
则把资源引用文件aar也放入新项目的lib下,
首先要在项目的build中android{}中添加如下声明,
repositories {
flatDir {
dirs 'libs'
}
}
然后在dependencies中添加相应的ompile(name:'aar文件名', ext:'aar'),
同时修改“compile fileTree”为“provided fileTree(include: ['*.jar'], dir: 'libs')
dependencies {
provided fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:26.+'
compile(name:'aar文件名', ext:'aar')
}
最后运行新项目,调用集成的jar包和资源文件,测试成功!
apply plugin: 'com.android.application'
改为
apply plugin: 'com.android.library'
同时将applicationId删除,这样Module就成了一个lib库
第二步:在lib中的build.gradle中添加生成jar包的task任务
方式一:
def SDK_BASENAME = "Sdk";//打包后名字
def SDK_VERSION = "_V1.0";//${defaultConfig.versionName}
def sdkDestinationPath = "build";//保存目录
def zipFile = file('build/intermediates/bundles/release/classes.jar')
task deleteBuild(type: Delete) {//删除jar包
delete sdkDestinationPath + "/" + SDK_BASENAME + SDK_VERSION + ".jar"
}
task makeJar(type: Jar) {//生成jar
from zipTree(zipFile)
from fileTree(dir: 'src/main', includes: ['assets/**'])
baseName = SDK_BASENAME + SDK_VERSION
destinationDir = file(sdkDestinationPath)//目的地
}
makeJar.dependsOn(deleteBuild, build)
//在终端执行生成JAR包
// gradlew makeJar
方式二:
def SDK_BASENAME = "Sdk";//打包后名字
def SDK_VERSION = "_V1.0";//${defaultConfig.versionName}
def SDK_NAME = SDK_BASENAME + SDK_VERSION + ".jar";
//Copy类型
task makeJar(type: Copy) {
//删除存在的
delete 'build/libs/' + SDK_NAME
//设置拷贝的文件
from('build/intermediates/bundles/release/')
//打进jar包后的文件目录
into('build/libs/')
//将classes.jar放入build/libs/目录下
//include ,exclude参数来设置过滤
//(我们只关心classes.jar这个文件)
include('classes.jar')
//重命名
rename('classes.jar', SDK_NAME)
}
makeJar.dependsOn(build)
//在终端执行生成JAR包
//gradlew makeJar
方式三:
task clearJar(type: Delete) {
delete 'libs/sdk.jar'
}
task makeJar(type: org.gradle.api.tasks.bundling.Jar) {
//指定生成的jar名
baseName 'sdk'
//从哪里打包class文件
from('build/intermediates/classes/debug/org/cmdmac/cloud/pluginsdk/')
//打包到jar后的目录结构
into('build/libs/')
//去掉不需要打包的目录和文件
exclude('test/', 'BuildConfig.class', 'R.class')
//去掉R$开头的文件
exclude { it.name.startsWith('R$'); }
}
makeJar.dependsOn(clearJar, build)
//在终端执行生成JAR包
//gradlew makeJar
方式四:
def SDK_BASENAME = "Sdk";//打包后名字
def SDK_VERSION = "_V1.0";//${defaultConfig.versionName}
def SDK_NAME = SDK_BASENAME + SDK_VERSION + ".jar";
def zipFile = file('build/intermediates/bundles/release/classes.jar')
def sdkDestinationPath = "build/libs/";//保存目录
task makeJar(type: Jar) {//生成jar
delete 'build/libs/' + SDK_NAME
from zipTree(zipFile)
from fileTree(dir: 'src/main', includes: ['assets/**'])
from(project.zipTree('libs/xutils-3.3.4.jar'))
from(project.zipTree('libs/glide-3.7.0.jar'))
from(project.zipTree('libs/xutils-3.3.4.jar'))
baseName = SDK_BASENAME + SDK_VERSION
destinationDir = file(sdkDestinationPath)//目的地
}
makeJar.dependsOn(build)
第三步:在Terminal工具中执行下面命令
gradlew :test:clean :test:makeJar //:tset表示lib库名称,这种写法是指定lib库生成jar
gradlew makeJar //这种是将项目中的lib库生成jar。(对项目中的所有有makeJar任务的lib都有效)
如果需要同时将资源文件也打进去的话,则要在以上四种方法中添加
from fileTree(dir: 'src/main', includes: ['res/**'])
即按第一种方式来说就是:
def SDK_BASENAME = "xxx_sdk";//打包后名字
def SDK_VERSION = "_V1.0";//${defaultConfig.versionName}
def sdkDestinationPath = "build";//保存目录
def zipFile = file('build/intermediates/bundles/default/classes.jar')
task deleteBuild(type: Delete) {//删除jar包
delete sdkDestinationPath + "/" + SDK_BASENAME + SDK_VERSION + ".jar"
}
task makeJar(type: Jar) {//生成jar
from zipTree(zipFile)
from fileTree(dir: 'src/main', includes: ['assets/**'])
from fileTree(dir: 'src/main', includes: ['res/**'])
baseName = SDK_BASENAME + SDK_VERSION
destinationDir = file(sdkDestinationPath)//目的地
}
makeJar.dependsOn(deleteBuild, build)
这样打出的jar包中就包含了资源文件,然后在依赖的lib目录build\outputs\aar下找到资源引用文件release.aar文件。
在新项目中引入jar时,将新打出的jar复制到新项目中的lib下,添加依赖即可,同时需要引用资源文件,
则把资源引用文件aar也放入新项目的lib下,
首先要在项目的build中android{}中添加如下声明,
repositories {
flatDir {
dirs 'libs'
}
}
然后在dependencies中添加相应的ompile(name:'aar文件名', ext:'aar'),
同时修改“compile fileTree”为“provided fileTree(include: ['*.jar'], dir: 'libs')
dependencies {
provided fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:26.+'
compile(name:'aar文件名', ext:'aar')
}
最后运行新项目,调用集成的jar包和资源文件,测试成功!