Android Studio
Android Studio 模块编译打包出jar
更新日期: 2025-07-10
2025-07-10 高版本agp打包后,低版本使用jar包会报错
2025-05-22 更新
2023-11-23 合并jar的方法
2023-10-17 创建文档
开发环境
Android Studio Jellyfish | 2023.3.1 Patch 1
Android Studio Electric Eel | 2022.1.1 Patch 2
Android Studio 模块打包出jar
除了打包成aar,Android Studio也可以打包出jar。
需要我们在gradle中新增一个打jar包任务(task)
以下是模块完整的gradle
plugins {
id 'com.android.library'
}
android {
namespace 'com.rustfisher.rustfisherlib'
compileSdk 33
defaultConfig {
minSdk 19
targetSdk 33
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
consumerProguardFiles "consumer-rules.pro"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile ( 'proguard-android-optimize.txt' ), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion . VERSION_1_8
targetCompatibility JavaVersion . VERSION_1_8
}
lint {
baseline = file ( "lint-baseline.xml" )
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.0.0'
testImplementation 'junit:junit:4.13.2'
// androidTestImplementation 'androidx.test.ext:junit:1.1.1'
// androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
}
task makeJar ( type: Copy ) {
//删除存在的
delete 'build/libs/rustfisherlib.jar'
//设置拷贝的文件
from ( 'build/intermediates/aar_main_jar/release/' )
//打进jar包后的文件目录
into ( 'build/libs/' )
//将classes.jar放入build/libs/目录下
//include ,exclude参数来设置过滤
include ( 'classes.jar' )
//重命名
rename ( 'classes.jar' , 'rustfisherlib.jar' )
}
makeJar . dependsOn ( build )
gradle相关方法说明
1、Task 类型:(type: Copy) 表示继承 Copy 这个类
2、from 和 into 是复制文件使用的方法
执行这个gradle任务即可看到效果。
使用 Android Studio Meerkat | 2024.3.1 Patch 1
版本信息如下:
Android Studio Meerkat | 2024.3.1 Patch 1
Build #AI-243.24978.46.2431.13208083, built on March 13, 2025
Runtime version: 21.0.5+-13047016-b750.29 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Toolkit: sun.lwawt.macosx.LWCToolkit
这个版本的as使用的Runtime version: 21.0.5
,它编译出来的字节码不能被用老版本gradle的app直接使用。
比如有个app工程使用jar包。
这个工程项目级别的gradle,指定了agp版本7.4.2
// app工程中 项目级别的build.gradle文件
buildscript {
repositories {
google ()
mavenCentral ()
}
dependencies {
classpath "com.android.tools.build:gradle:7.4.2"
}
}
plugins {
id 'com.android.application' version '7.4.2' apply false
id 'com.android.library' version '7.4.2' apply false
}
项目的gradle版本是7.5
gradle/wrapper/gradle-wrapper.properties
文件
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
使用gradle-8打包的jar,在项目编译时就会报D8错误
{ "kind" : "error" , "text" : "java.lang.NullPointerException: Cannot invoke \"String.length()\" because \"<parameter1>\" is null" , "sources" :[{ "file" : "E:\\transformed\\jetified-你的lib.jar" }], "tool" : "D8" }
如果一定要用gradle-8以及对应agp来打包,需要做如下修改
from的路径是 build/intermediates/aar_main_jar/release/syncReleaseLibJars
//设置拷贝的文件
from ( 'build/intermediates/aar_main_jar/release/syncReleaseLibJars' )
参考: https://stackoverflow.com/questions/16763090/how-to-export-library-to-jar-in-android-studio
负责打包基础库的工程,不要升级as、gradle到最新版本
Mac上可以同时安装2个版本的Android Studio。安装后一个as时选择保留两者即可。
执行gradle任务
可以在Android Studio右边的Gradle栏目里找到makeJar这个任务。
一般在 libName -> Tasks -> other -> makeJar
执行过一次后,在顶部任务栏中能找到这个任务
合并jar包
再makeJar基础上,再添加一个任务。把模块里的第三方jar包合并进去。
task makeJar ( type: Copy ) {
//删除存在的
delete 'build/libs/output1-sdk.jar'
//设置拷贝的文件
from ( 'build/intermediates/aar_main_jar/release/' )
//打进jar包后的文件目录
into ( 'build/libs/' )
//include ,exclude参数来设置过滤
include ( 'classes.jar' )
//重命名
rename ( 'classes.jar' , 'output1-sdk.jar' )
}
makeJar . dependsOn ( build )
task mergeJar ( type: Jar , dependsOn: [ 'compileReleaseJavaWithJavac' ]) { // task buildJar(type: Jar, dependsOn: ['build'])
delete 'build/libs/all-in1-sdk.jar'
//导出的jar文件的名称
archiveName = "all-in1-sdk.jar"
//需打包的资源所在的路径集
// from('build/intermediates/aar_main_jar/release/')
from ( project . zipTree ( 'build/libs/output1-sdk.jar' )) //
from ( project . zipTree ( 'libs/other1-sdk.jar' )) //第三方jar包
from ( project . zipTree ( 'libs/other2-sdk.jar' )) //第三方jar包
destinationDir = file ( 'build/libs' ) // //导出的jar文件的存放目录(未指定则默认存放在build/libs下)
}
mergeJar . dependsOn ( makeJar , build )
上面用了过时的属性 destinationDir archiveName
参考
本站说明
一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~
📖AndroidTutorial
📚AndroidTutorial
🙋反馈问题
🔥最近更新
🍪投喂作者
Ads