zoukankan      html  css  js  c++  java
  • [转]AndroidStudio导出jar包

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

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

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

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

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

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

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

    [java] view plaincopy
     
    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
    接着输入命令:

    gradle clean build

    就会看到Volley目录下有一个build文件夹,在 build/intermediates/classes/release下,我们可以看到Java文件生成的class文件,我们只要用jar打包这个文件夹就可以了
    输入下面的命令,记得最后一个是'.',前面有空格。
    jar cvf volley.jar -C  build/intermediates/classes/release .

    ------------------------------------------------------------------------------

    如果遇到报错:'jar' 不是内部或外部命令,也不是可运行的程序

    1)首先检查 jdk版本的bin里面是否有javac.exe  和jar.exe 

    2)若有,则检查环境变量是否配置正确

    JAVA_HOME:     D:jdkJDK1.6
    PATH        :      %JAVA_HOME%in;%JAVA_HOME%jrein;

    ------------------------------------------------------------------------------
    不懂什么意思的话,去
    http://blog.sina.com.cn/s/blog_93d133c601013hdm.html看下。
    如无意外的话你会在Volley文件夹下看到volley.jar。


    2. 但是这并不是我们想要的啊,我想AndroidStudio自动的帮我搞好,生成jar包.
    这就需要我们在build.gradle中设置了
    由gradle官网可以知道,task和project是gradle最主要的东西,我当初的想法就是,
    建立一个task,调用jar命令帮我生成jar包,结果成功了,如下:

    [java] view plaincopy
     
    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就行了
    gradle buildLib
    *_*成功了吧..具体更多的细节的话,你们可以去官网找下答案.

    如果遇到错误:

    * What went wrong:
    Execution failed for task ':transformResourcesWithMergeJavaResForDebug'.
    > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/NOTICE
            File1: E:demosautobahn-androidAutobahnlibsjackson-mapper-asl-1.9.7.jar
            File2: E:demosautobahn-androidAutobahnlibsjackson-core-asl-1.9.7.jar

    则添加

        android{
        packagingOptions {
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/license.txt'
            exclude 'META-INF/NOTICE.txt'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/notice.txt'
            exclude 'META-INF/ASL2.0'
        }
    }
  • 相关阅读:
    Attribute+Reflection,提高代码重用
    类型安全的EventHandlerList
    简单一招,使解决方案下的项目版本号统一
    T-SQL 随机返回特定行数据和分页查询
    2013年中国系统架构师大会随想
    C#实现在注册表中保存信息
    滤镜
    蒙版
    图层样式和混合模式
    布尔运算
  • 原文地址:https://www.cnblogs.com/ryq2014/p/5276093.html
Copyright © 2011-2022 走看看