AndroidStudio打包jar包
androidstudio开发好了library之后,我们需要到jar都出如何提供给其他人使用:
在库中的build.gradle中配置当前的jar的脚本文件
task makeJar(type:org.gradle.api.tasks.bundling.Jar) {
//指定生成的jar名
baseName 'sdk'
//从哪里打包class文件/TestRxJava/testlibrary/
from('build/intermediates/classes/debug/com/aige/testlibrary/')
//打包到jar后的目录结构TestRxJava/testlibrary/libs/
into('TestRxJava/testlibrary/libs/')
// into('org/cmdmac/cloud/pluginsdk/')
//去掉不需要打包的目录和文件
exclude('test/', 'BuildConfig.class', 'R.class')
//去掉R开头的文件
exclude{ it.name.startsWith('R');}
}
makeJar.dependsOn(clearJar, build)
在androidstudio终端目录下这些命令:gradle makejar(makejar目录是在build.gradle目录下写的脚步名称)
➜ TestRxJava gradle makejar
:testlibrary:preBuild UP-TO-DATE
:testlibrary:preDebugBuild UP-TO-DATE
:testlibrary:checkDebugManifest
:testlibrary:preDebugAndroidTestBuild UP-TO-DATE
.........
.............
:testlibrary:check
:testlibrary:build
:testlibrary:clearJar UP-TO-DATE
:testlibrary:makeJar UP-TO-DATE
BUILD SUCCESSFUL
Total time: 1.669 secs
编译完成后,我们在开发的目录下可以看到生成的文件,只有把下面的jar包拷贝出来就可以给其他人使用
➜ testlibrary tree -L 3
.
├── build
│ ├── generated
│ │ ├── assets
│ │ ├── res
│ │ └── source
│ ├── intermediates
│ │ ├── annotations
│ ├── libs
│ │ └── sdk.jar ---->生成的sdk.jar文件
│ ├── outputs
│ │ └── aar
├── libs
├── proguard-rules.pro
├── src
│ ├── androidTest
│ │ └── java
│ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── res
│ └── test
│ └── java
└── testlibrary.iml
45 directories, 7 files
接下来我们查看打包的字节码的内容,修改sdk.jar->sdk.tar
➜ libs cp sdk.jar sdk.tar
➜ libs ls
sdk.jar sdk.tar
➜ libs tar zxvf sdk.tar
x TestRxJava/
x TestRxJava/testlibrary/
x TestRxJava/testlibrary/libs/
x TestRxJava/testlibrary/libs/META-INF/
x TestRxJava/testlibrary/libs/META-INF/MANIFEST.MF
x TestRxJava/testlibrary/libs/TestLibrary.class
➜ libs
接下来我们使用javap -c TestLibrary 可以查看下面的*.class文件的内容
➜ libs javap -c TestLibrary
警告: 二进制文件TestLibrary包含com.aige.testlibrary.TestLibrary
Compiled from "TestLibrary.java"
public class com.aige.testlibrary.TestLibrary {
public com.aige.testlibrary.TestLibrary();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public java.lang.String getString();
Code:
0: ldc #2 // String hellow jar
2: areturn
}
代码仓库:https://github.com/cangck/testLibrary