如何从Android Studio项目中创建.jar

dum*_*ll3 95 java android jar android-studio

我正在使用AndroidStudio,我有如下所示的项目:

在此输入图像描述

蓝圈内的是myLib.myLib还需要使用红色圆圈内的外部库和一个apache包(绿色圆圈).

所以我想让整个事情成为一个单独的.jar,所以我可以在另一个项目中使用它.

一步一步的指南将非常感激,我是开发人员世界的初学者.

谢谢!

Abh*_*agi 133

  • 打开库项目的build.gradle 在此输入图像描述

  • 在build.gradle中编写两个任务 - deleteJar和createJar并添加规则createJar.dependsOn(deleteJar,build) 在此输入图像描述

上面的代码:

task deleteJar(type: Delete) {
    delete 'libs/jars/logmanagementlib.jar'
}           

task createJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('libs/jars/')
    include('classes.jar')
    rename('classes.jar', 'logmanagementlib.jar')
}

createJar.dependsOn(deleteJar, build)
Run Code Online (Sandbox Code Playgroud)
  • 从右侧展开gradle面板并打开您图书馆下的所有任务 - >其他.您将在那里看到两个新任务 - createJar和deleteJar 在此输入图像描述

  • 双击createJar 在此输入图像描述

  • 任务成功运行后,从createJar任务中提到的路径获取生成的jar,即libs/xxxx.jar 在此输入图像描述

  • 将新生成的jar复制到所需项目的lib文件夹中 - >右键单击 - >选择"add as library"

  • 对于Android Studio 3.1.3和Gradle版本4.4,从('build/intermediates/bundles/release /')更改为('build/intermediates/packaged-classes/release /') (10认同)
  • 那么,我应该告诉你,我不确定'释放'.我有`debug`和`default`,但没有'release`文件夹.您使用的是哪个版本的插件?你知道这是否记录在任何地方? (4认同)
  • 有时人们通过观看而不是阅读来理解.你看到这是一个很好的用户体验☺ (3认同)
  • 如果你没有`release`,请使用`default`.改为那就解决了我的问题. (3认同)
  • 你想复制什么?我们应该定位包含APK文件的文件夹吗?我的意思是在('build/intermediates/bundles/default')行中这个目录为你提供什么.我的android工作室中没有名称为bundle的文件夹,并且我在createJar任务中一直没有获得任何来源 (3认同)
  • 我没有`release`文件夹. (2认同)
  • 我没有`bundles` 文件夹,所以没有`classes.jar` 出现,也没有什么可以复制的。我能做些什么来解决这个问题? (2认同)
  • 我什至没有看到这个文件夹 build/intermediates/packaged-classes/release/ (2认同)

Sco*_*rta 57

如果您在Gradle中将代码设置为普通Java模块,那么让Gradle为您提供包含内容的jar文件非常容易.该jar文件只包含您的代码,而不是它依赖的其他Apache库.我建议这样分发; 将依赖项捆绑到库中是有点奇怪的,这些库的用户必须自己包含这些依赖项更为正常(因为否则这些项目的冲突已经链接了库的副本,可能是不同的版本).更重要的是,如果您要发布图书馆,可以避免在重新分发其他人的代码时出现潜在的许可问题.

将需要编译的代码转换为jar,并将其移至Android Studio中的单独普通Java模块:

  1. 文件菜单> 新模块... > Java库
  2. 在向导中设置库,Java包名称和类名.(如果你不想让它为你创建一个类,你可以在创建模块后删除它)
  3. 在Android代码中,设置对新模块的依赖关系,以便它可以使用新库中的代码:
  4. 文件 > 项目结构 > 模块 > (您的Android模块) > 依赖项 > + > 模块依赖项.请参见下面的截图: 在此输入图像描述
  5. 从出现的对话框的列表中选择您的模块: 在此输入图像描述

希望您的项目现在应该正常建设.完成构建后,Java库的jar文件将放在模块目录的build/libs目录中.如果要手动构建jar文件,可以从Gradle窗口运行其jar构建文件任务: 在此输入图像描述

  • 我得到:java.lang.NoClassDefFoundError:com.loopj.android.http.RequestParams。那是我正在编译的外部库。 (2认同)
  • 它只适用于java库,并且不存在android库中的jar任务 (2认同)

Har*_*jem 24

Gradle已经有了Task这个other

在此输入图像描述

然后向下滚动createFullJarRelease并单击它.

Gradle任务

之后,您将在项目的此文件夹中找到您的人工制品

Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar

  • 看不到这个选项。这是否已添加到最近的 Studio 版本中? (3认同)

Bao*_* Le 10

只需将其添加到java模块的build.gradle即可.它将包括归档中的依赖库.

mainClassName = "com.company.application.Main"

jar {
  manifest { 
    attributes "Main-Class": "$mainClassName"
  }  

  from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
  }
}
Run Code Online (Sandbox Code Playgroud)

这将导致[module_name]/build/libs/[module_name] .jar文件.