AndroidStudio项目打包成jar的简单方法

 更新时间:2017年11月14日 10:36:43   作者:lnny_99  
JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件,在eclipse中我们知道如何将一个项目导出为jar包,供其它项目使用呢?下面通过本文给大家介绍ndroidStudio项目打包成jar的简单方法,需要的朋友参考下吧

首先备注一下

JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。为 J2EE 应用程序创建的 JAR 文件是 EAR 文件(企业 JAR 文件)。

什么是AAR,与JAR区别

*.jar:只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件。

*.aar:包含所有资源,class以及res资源文件全部包含

Android Studio 如何打JAR包

在eclipse中我们知道如何将一个项目导出为jar包,供其它项目使用。 在AS中可以通过修改gradle才处理。

我们新建一个项目MakeJar,在项目中新建一个modle-类型为android-library

如图:app为我们的主工程,librarydemo是我们要将其生成jar包的model. 在library demo中的build.gradle中与android结构同级加入如下代码:

 项目结构

 项目结构

步骤1-依赖

主工程App的build中要加入librarydemo 这个依赖model:

dependencies {
 compile fileTree(dir: 'libs', include: ['*.jar'])
 compile 'com.android.support:appcompat-v7:22.2.0'
 compile project(':librarydemo')
}

步骤2- 载library种编写task

当你编译完工程后其实library的所有java文件已经生成了包含class 的classes.jar包,如下图所示:

classes.jar的位置

这个为了方便给出一个task 将改classes.jar 导出到library的build/libs/下,并修改名字为mysdk.jar ( 名字随意)。

//Copy类型
task makeJar(type: Copy) {
 //删除存在的
 delete 'build/libs/mysdk.jar'
 //设置拷贝的文件
 from('build/intermediates/bundles/release/')
 //打进jar包后的文件目录
 into('build/libs/')
 //将classes.jar放入build/libs/目录下
 //include ,exclude参数来设置过滤
 //(我们只关心classes.jar这个文件)
 include('classes.jar')
 //重命名
 rename ('classes.jar', 'mysdk.jar')
}
makeJar.dependsOn(build)
//在终端执行生成JAR包
// gradlew makeJar

在android studio 提供的Terminal中(目录默认伟当前工程的)键入 ./gradlew makeJar 回车看到如下所示就OK了:

结果

生成的jar包在你的library那个的build下的libs下,然后就可以使用了。

声明:打出来的jar只有源代码的.class 文件,不包含资源文件

看到那么多人踩的,那么多人遇到问题,在这里说明下并解决
不得了

常见问题

有人问:

怎么把资源(图片,布局,string等)打进jar包呢?

答案是: 既然不包含那我们就把jar包中用到的资源放到你使用该jar的工程里面,然后通过反射即可。
这里给出反射类:

public class MResource {
 public static int getIdByName(Context context, String className, String resName) {
 String packageName = context.getPackageName();
 int id = 0;
 try {
  Class r = Class.forName(packageName + ".R");
  Class[] classes = r.getClasses();
  Class desireClass = null;
  for (Class cls : classes) {
  if (cls.getName().split("\\$")[1].equals(className)) {
   desireClass = cls;
   break;
  }
  }
  if (desireClass != null) {
  id = desireClass.getField(resName).getInt(desireClass);
  }
 } catch (Exception e) {
  e.printStackTrace();
 }
 return id;
 }
}

个人觉得还是用as为我们提供的aar包比较好,编译完就生成了aar了,而且也不用担心资源问题,万一你漏了一个呢。
生成的aar在你的library的/build/outputs/aar/

说明下,评论中出现的问题大多是因为名字或者代码结构问题,

效果图

demo

最后附上该demo的地址:

https://github.com/ta893115871/MakeJar

总结

以上所述是小编给大家介绍的ndroidStudio项目打包成jar的简单方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Jetpack Compose惯性衰减动画AnimateDecay详解

    Jetpack Compose惯性衰减动画AnimateDecay详解

    这篇文章主要为大家介绍了Jetpack Compose惯性衰减动画AnimateDecay详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • so加载Linker跟NameSpace机制详解

    so加载Linker跟NameSpace机制详解

    这篇文章主要为大家介绍了so加载Linker跟NameSpace机制详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Android选中突出背景效果的底部导航栏功能

    Android选中突出背景效果的底部导航栏功能

    这篇文章主要介绍了Android选中突出背景效果的底部导航栏功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Flutter学习教程之Route跳转以及数据传递

    Flutter学习教程之Route跳转以及数据传递

    这篇文章主要给大家介绍了关于Flutter学习教程之Route跳转以及数据传递的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Flutter具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Android画板开发之添加文本文字

    Android画板开发之添加文本文字

    这篇文章主要为大家详细介绍了Android画板开发之添加文本文字功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Android实现简单计算器

    Android实现简单计算器

    这篇文章主要为大家详细介绍了Android实现简单计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Android11文件管理权限申请详细介绍

    Android11文件管理权限申请详细介绍

    大家好,本篇文章主要讲的是Android11文件管理权限申请详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Android仿头条、微信大图预览视图的方法详解

    Android仿头条、微信大图预览视图的方法详解

    大图预览应该对大家来说都不陌生,下面这篇文章主要给大家介绍了关于Android仿头条、微信大图预览视图的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • 退出Android程序时清除所有activity的实现方法

    退出Android程序时清除所有activity的实现方法

    这篇文章主要介绍了退出Android程序时清除所有activity的实现方法,详细分析了Android退出时清除activity的原理与实现技巧,需要的朋友可以参考下
    2016-04-04
  • Android短信验证服务分享

    Android短信验证服务分享

    这篇文章主要为大家详细介绍了Android短信验证服务,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09

最新评论