Android Studio 使用 Gradle 打包 Jar
2015-12-18 11:31
661 查看
Android Studio 打 Jar 包一直是一个麻烦的事,按照网上现有的教程,打包一个混淆的 jar 需要完成下列步骤:
1.如果不使用assets文件夹打到jar中可使用一下方法:
与eclipse不同,android studio 1.0 没提供导出jar包的图形界面。需要结合gradle来生成jar包。
首先 需要设置module应用的gradle插件为 library 代码长这样:
这样,build的时候,android studio 1.0会在 module目录的build/intermediates/bundles/release/ 子目录(这个目录以后版本可能会变)里生成一个名为classes的jar包。
如果你的项目没用到assets等资源文件,那你直接拷贝出去就可以用了。
2.以下是Gradle 打 Jar 包
build.gradle
需要混淆则运行
至于想更多个性化的朋友,建议从源码入手。
1.如果不使用assets文件夹打到jar中可使用一下方法:
与eclipse不同,android studio 1.0 没提供导出jar包的图形界面。需要结合gradle来生成jar包。
首先 需要设置module应用的gradle插件为 library 代码长这样:
apply plugin: 'com.android.library'[/code]
这样,build的时候,android studio 1.0会在 module目录的build/intermediates/bundles/release/ 子目录(这个目录以后版本可能会变)里生成一个名为classes的jar包。
如果你的项目没用到assets等资源文件,那你直接拷贝出去就可以用了。
2.以下是Gradle 打 Jar 包
代码
废话不多说,先上代码(注:只在 Gradle Android Plugin 1.2.3 测试过)build.gradle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | import com.android.build.gradle.AppPlugin import com.android.build.gradle.LibraryPlugin import proguard.gradle.ProGuardTask apply plugin: 'com.android.application' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "org.chaos.demo.jar" minSdkVersion 22 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) } //dependsOn 可根据实际需要增加或更改 task buildJar(dependsOn: ['compileReleaseJava'], type: Jar) { appendix = "demo" baseName = "androidJar" version = "1.0.0" classifier = "release" //后缀名 extension = "jar" //最终的 Jar 包名,如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension] archiveName = "AndroidJarDemo.jar" //需打包的资源所在的路径集 def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"]; //初始化资源路径集 from srcClassDir //去除路径集下部分的资源 exclude "org/chaos/demo/jar/BuildConfig.class" exclude "org/chaos/demo/jar/BuildConfig\$*.class" exclude "**/R.class" exclude "**/R\$*.class" //只导入资源路径集下的部分资源 include "org/chaos/demo/jar/**/*.class" //注: exclude include 支持可变长参数 } task proguardJar(dependsOn: ['buildJar'], type: ProGuardTask) { //Android 默认的 proguard 文件 configuration android.getDefaultProguardFile('proguard-android.txt') //manifest 注册的组件对应的 proguard 文件 configuration project.buildDir.absolutePath + "/intermediates/proguard-rules/release/aapt_rules.txt" configuration 'proguard-rules.pro' String inJar = buildJar.archivePath.getAbsolutePath() //输入 jar injars inJar //输出 jar outjars inJar.substring(0, inJar.lastIndexOf('/')) + "/proguard-${buildJar.archiveName}" //设置不删除未引用的资源(类,方法等) dontshrink Plugin plugin = getPlugins().hasPlugin(AppPlugin) ? getPlugins().findPlugin(AppPlugin) : getPlugins().findPlugin(LibraryPlugin) if (plugin != null) { List<String> runtimeJarList if (plugin.getMetaClass().getMetaMethod("getRuntimeJarList")) { runtimeJarList = plugin.getRuntimeJarList() } else if (android.getMetaClass().getMetaMethod("getBootClasspath")) { runtimeJarList = android.getBootClasspath() } else { runtimeJarList = plugin.getBootClasspath() } for (String runtimeJar : runtimeJarList) { //给 proguard 添加 runtime libraryjars(runtimeJar) } } } |
使用方法
不需要混淆则运行命令gradle buildJar 或 ./gradlew buildjar
需要混淆则运行
gradle proguardJar 或 ./gradlew proguardJar
最后
buildJar 这部分相对比较简单,很多内容网上都有教程。关键在于混淆,由于团队每个人都有自己的安装习惯,JDK、Android SDK 路径不一定一致,并不能直接写死 runtime 的路径,最后直接看 Android Plugin 源码才写出了 proguardJartask。至于想更多个性化的朋友,建议从源码入手。
相关文章推荐
- MAC Android Studio 快捷键
- Android图形图像处理:canvas的save()和restore()函数详解
- 如何删除Android-studio中的整个项目
- 一、初识Android世界
- Android开发-使用自定义View实现loading效果
- 安卓开发学习之018 创建复合控件
- android subclipse subversive
- Android studio中如何使用Ndk(Jni)?
- greenDAO系列2--如何开始
- Android ViewDragHelper完全解析 自定义ViewGroup神器
- android scrollview嵌套listView和gridView的问题。
- Android 5.x Theme 与 ToolBar 实战
- Android 开发笔记——通过 Intent 传递类对象
- Android(Lollipop/5.0) Material Design(二) 入门指南
- vlc-android1.8.0的全部源代码[包括C语言]
- 读博文学Android
- Android图文详解属性动画
- android使用属性动画执行抖动效果
- Android 提交代码到git
- Android性能调优工具TraceView介绍