AndroidStudio导出jar包

原文:http://blog.csdn.net/hjq842382134/article/details/38538097


不像在Eclipse,可以直接导出jar包。AndroidStudio只可以生成aar包。

在网上看到许多朋友问怎么可以像Eclipse一样导出jar包,其实我们只要知道它的原理就可以了。

用jar命令就可以打包你所需要的资源,并指定jar包名。

在网上下载Volley源代码,导出jar包为例子。

在Volley项目工程中,我修改了下他的gradle版本,改为0.12+,

因为我是最新的gradle2.0。现在它的build.gradle文件如下:

[java]  view plain  copy
  1. buildscript {  
  2.     repositories {  
  3.         mavenCentral()  
  4.     }  
  5.     dependencies {  
  6.         classpath 'com.android.tools.build:gradle:0.12.+'  
  7.     }  
  8. }  
  9. apply plugin: 'com.andriod.library'  
  10.   
  11. android {  
  12.     compileSdkVersion 19  
  13.     buildToolsVersion = "20"  
  14.   
  15.     sourceSets {  
  16.         defaultConfig {  
  17.             testPackageName 'com.android.volley.tests'  
  18.         }  
  19.   
  20.         main {  
  21.             assets.srcDirs       = ['assets']  
  22.             res.srcDirs          = ['res']  
  23.             aidl.srcDirs         = ['src']  
  24.             resources.srcDirs    = ['src']  
  25.             renderscript.srcDirs = ['src']  
  26.             java.srcDirs         = ['src']  
  27.             manifest.srcFile 'AndroidManifest.xml'  
  28.   
  29.         }  
  30.   
  31.         instrumentTest.setRoot('tests')  
  32.         instrumentTest.java.srcDirs = ['tests/src']  
  33.     }  
  34. }  

因为再导入Volley工程的时候,我选择的是推荐的Gradle Wrapper,它的作用是使我们在Unix,windows平台
下实现兼容。我用的是windows,所以先到达Volley的根目录,Volley我下载到E:\下
cd e:\Volley
接着输入命令:

gradlew clean build

就会看到Volley目录下有一个build文件夹,在 build/intermediates/classes/release下,我们可以看到Java文件生成的class文件,我们只要用jar打包这个文件夹就可以了
输入下面的命令,记得最后一个是'.',前面有空格。
jar cvf volley.jar -C  build/intermediates/classes/release .
不懂什么意思的话,去
http://blog.sina.com.cn/s/blog_93d133c601013hdm.html看下。
如无意外的话你会在Volley文件夹下看到volley.jar。
但是这并不是我们想要的啊,我想AndroidStudio自动的帮我搞好,生成jar包.
这就需要我们在build.gradle中设置了
由gradle官网可以知道,task和project是gradle最主要的东西,我当初的想法就是,
建立一个task,调用jar命令帮我生成jar包,结果成功了,如下:

 
[java]  view plain  copy
  1. buildscript {  
  2.     repositories {  
  3.         mavenCentral()  
  4.     }  
  5.     dependencies {  
  6.         classpath 'com.android.tools.build:gradle:0.12.+'  
  7.     }  
  8. }  
  9.   
  10. //定义一个函数,target是生成jar包的文件名,classDir是class文件所在的文件夹  
  11. def makeJar(String target,String classDir){  
  12.     exec{  
  13.         executable "jar"   //调用jar  
  14.         args "cvf",target  
  15.         args "-C", classDir  
  16.         args "","."  
  17.   
  18.   
  19.     }  
  20. }  
  21.   
  22. //新建一个task,名为buildLib,依赖build(build是一个自带的task)  
  23. task buildLib(dependsOn:['build'])<< {  
  24.     makeJar("volley.jar","build/intermediates/classes/release")  
  25.   
  26.   
  27. }  
  28.   
  29.   
  30. apply plugin: 'android-library'  
  31.   
  32.   
  33. android {  
  34.     compileSdkVersion 19  
  35.     buildToolsVersion = "20"  
  36.   
  37.   
  38.     sourceSets {  
  39.         defaultConfig {  
  40.             testPackageName 'com.android.volley.tests'  
  41.         }  
  42.   
  43.   
  44.         main {  
  45.             assets.srcDirs       = ['assets']  
  46.             res.srcDirs          = ['res']  
  47.             aidl.srcDirs         = ['src']  
  48.             resources.srcDirs    = ['src']  
  49.             renderscript.srcDirs = ['src']  
  50.             java.srcDirs         = ['src']  
  51.             manifest.srcFile 'AndroidManifest.xml'  
  52.   
  53.   
  54.         }  
  55.   
  56.   
  57.         instrumentTest.setRoot('tests')  
  58.         instrumentTest.java.srcDirs = ['tests/src']  
  59.     }  
  60. }  

现在我们在Volley文件夹下运行buildLib这个task就行了
gradlew buildLib
*_*成功了吧..具体更多的细节的话,你们可以去官网找下答案,或者留言问我也可以。。







1.0的截图(亲测通过):

你可以点底部任务栏的Terminal,输入gradlew build











方法一:通过jar命令

jar命令的用法:

下面是jar命令的帮助说明:

用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...

选项包括:
    -c  创建新的归档文件
    -t  列出归档目录
    -x  解压缩已归档的指定(或所有)文件
    -u  更新现有的归档文件
    -v  在标准输出中生成详细输出
    -f  指定归档文件名
    -m  包含指定清单文件中的清单信息
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储;不使用任何 ZIP 压缩
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含其中的文件
如果有任何目录文件,则对其进行递归处理。
清单文件名、归档文件名和入口点名的指定顺序
与 "m"、"f" 和 "e" 标志的指定顺序相同。

示例 1:将两个类文件归档到一个名为 classes.jar 的归档文件中:
       jar cvf classes.jar Foo.class Bar.class
示例 2:使用现有的清单文件 "mymanifest" 并
           将 foo/ 目录中的所有文件归档到 "classes.jar" 中:
       jar cvfm classes.jar mymanifest -C foo/ .

 

下文假设编译后的class文件在bin目录下

一、打包成一般的jar包

输入如下命令即可:

Cmd代码  复制代码  收藏代码
  1. jar cvf counter.jar -C bin  

其中,“-C bin”实际上是告诉jar命令先cd到bin目录下,再在此目录执行没有参数“-C bin”的命令,等价于:

 

Cmd代码  复制代码  收藏代码
  1. cd bin   
  2. jar cvf counter.jar // "."代表当前路径  
 

二、打包成可运行的jar包

要打包成可运行的jar包,有两种方法,一是手动创建MANIFEST.MF文件,并在其中指定主类;二是使用jar的-e参数指定可运行jar包的入口点(即main类的完全名称).

以Java源代码行数统计程序的打包为例,演示如何打包:

1. 手动创建MANIFEST.MF文件:

1)首先编辑MANIFEST.MF文件,内容如下:

Mf代码    收藏代码 复制代码
  1. Manifest-Version: 1.0  
  2. Created-By: rsljdkt   
  3. Class-Path: .   
  4. Main-Class: Main  

 

说明:

  第一行指定清单的版本,若无,则JDK默认生成:Manifest-Version: 1.0

  第二行指明创建的作者,若无,则JDK默认生成Created-By: 1.6.0_22(Sun Microsystems Inc.)

  第三行指定主类所在类路径,

  第四行指明程序运行的主类

2)使用jar命令进行打包:

Cmd代码  复制代码  收藏代码
  1. jar cvfm counter.jar MANIFEST.MF -C bin  

 说明:

  参数f:指定打包后的包名。

  参数m:指定自定义的MANIFEST.MF清单文件,否则,JDK会自动生成不包含Main-Class的默认清单。

  参数c:指定是创建新的归档文件。

  参数v:在标准输出中生成详细输出,该选项是可选的。

 

2. 使用-e参数指定入口点:

执行如下命令即可:

 

Cmd代码  复制代码  收藏代码
  1. jar cvfe counter.jar Main -C bin  
 

 

方法二:使用Eclipse的Export功能:

一、打包成一般的jar包:

步骤如下:

  1)在要打包的项目上右击,选择Export

  2)在弹出的窗口中,选择Java -> JAR File,然后点击next按钮

  3)在JAR File Specification窗口中,设置打包成的文件名和存放位置,点击两侧next

  4)在JAR Manifest Specification窗口中,设置MANIFEST.MF清单文件的配置,

    若仅仅打包成单纯的jar包的话,不用做任何修改,采取默认即可

    若打包成可执行jar包的话,可以使用已存在的MANIFEST文件或者直接选择Main class

  5)点击Finish按钮,完成打包。

二、打包成可运行的jar包

步骤如下:

  1)在要打包的项目上右击,选择Export

  2)在弹出的窗口中,选择Java -> Runnable JAR File,然后点击next按钮

  3)在Runnable JAR File Specification窗口中,选择Launch configuration和Export destination

  4)点击Finish按钮,打包完成。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值