android studio转成依赖项目lib再连同资源文件一起打jar包过程
2018-03-05 14:12
357 查看
第一步:在项目中的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包和资源文件,测试成功!
相关文章推荐
- Android Studio项目打包AAR,以及项目中嵌入AAR文件,过程中出现R文件报错的坑
- 利用Android studio 删除项目中无用资源文件
- Android Studio项目将Module依赖(lib)转成jar包
- android 把activity和资源文件打包成jar包给其他项目使用
- 文件资源Android项目的工程结构
- 关于Android项目中,突然就R类找不到已存在的资源文件的解决方法
- Android开发环境搭建和项目各文件介绍应用安装和启动过程
- 文件资源Android项目的工程结构
- 如何在使用eclipse的情况下,清理android项目中的冗余class文件和资源文件以及冗余图片
- 关于Android项目中添加图片等资源在R文件中不生成的问题
- Android Studio项目混淆后输出的文件所在位置
- Android Studio利用Gradle删除没有使用到的资源和代码文件
- 项目清单文件分析与第一个ANDROID应用的启动过程
- Android 将被依赖的库项目打包成aar(非jar)文件
- maven工程打包成runnable的jar包,拷贝资源文件和依赖jar包
- maven(android-maven-plugin3.8.0)打包apk无法启动,apklib依赖包的资源索引出错(R文件与主模块冲突)问题解析
- 用 Ant 打包Android项目时 ,因资源文件中包含.9.png 报错
- 【Android】打包过程:生成自动代码->编译->(混淆)->dex文件->生成资源文件->打apk包->(签名)->对齐
- Android工程依赖:android中打包含有Activity以及资源文件的jar包在工程中调用
- 【转载】Android Studio jar、so、library项目依赖,原文链接http://zhengxiaopeng.com/2014/12/13/Android-Studio-jar、so、library项目依赖/