您的位置:首页 > 移动开发 > Android开发

[转]AndroidStudio导出jar包

2016-03-14 16:14 309 查看
原文链接:/article/1826762.html#

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

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

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

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

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

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

[java] view plaincopy

buildscript {

repositories {

mavenCentral()

}

dependencies {

classpath 'com.android.tools.build:gradle:0.12.+'

}

}

apply plugin: 'com.andriod.library'

android {

compileSdkVersion 19

buildToolsVersion = "20"

sourceSets {

defaultConfig {

testPackageName 'com.android.volley.tests'

}

main {

assets.srcDirs = ['assets']

res.srcDirs = ['res']

aidl.srcDirs = ['src']

resources.srcDirs = ['src']

renderscript.srcDirs = ['src']

java.srcDirs = ['src']

manifest.srcFile 'AndroidManifest.xml'

}

instrumentTest.setRoot('tests')

instrumentTest.java.srcDirs = ['tests/src']

}

}

因为再导入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:\jdk\JDK1.6
PATH : %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

------------------------------------------------------------------------------
不懂什么意思的话,去
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

buildscript {

repositories {

mavenCentral()

}

dependencies {

classpath 'com.android.tools.build:gradle:0.12.+'

}

}

//定义一个函数,target是生成jar包的文件名,classDir是class文件所在的文件夹

def makeJar(String target,String classDir){

exec{

executable "jar" //调用jar

args "cvf",target

args "-C", classDir

args "","."

}

}

//新建一个task,名为buildLib,依赖build(build是一个自带的task)

task buildLib(dependsOn:['build'])<< {

makeJar("volley.jar","build/intermediates/classes/release")

}

apply plugin: 'android-library'

android {

compileSdkVersion 19

buildToolsVersion = "20"

sourceSets {

defaultConfig {

testPackageName 'com.android.volley.tests'

}

main {

assets.srcDirs = ['assets']

res.srcDirs = ['res']

aidl.srcDirs = ['src']

resources.srcDirs = ['src']

renderscript.srcDirs = ['src']

java.srcDirs = ['src']

manifest.srcFile 'AndroidManifest.xml'

}

instrumentTest.setRoot('tests')

instrumentTest.java.srcDirs = ['tests/src']

}

}

现在我们在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:\demos\autobahn-android\Autobahn\libs\jackson-mapper-asl-1.9.7.jar
File2: E:\demos\autobahn-android\Autobahn\libs\jackson-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'
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: