转载请标明出处:一片枫叶的专栏

文本我们将讲解android studio打包apk,aar,jar包的相关知识。apk包就是android系统的安装包,这里没什么好说的,aar包是android中独有的类库包,而jar包是java中特有的类库包,在具体的介绍打包之前,我们先来aar包和jar包的区别。

jar包与aar包的区别

  • jar是java字节码文件(class文件)的归档文件,其不包含android中的资源文件等信息;

  • aar是android中特有的归档文件,既包含字节码文件也包含android的资源文件等;

区别:大家都知道jar文件把,如果你有一个Android Library项目,可以很容易的导出jar文件,然后在其他项目中很方便的引用,aar和jar类似,区别就是一个Android Library项目导出的jar文件不能包含资源文件,比如一些drawable文件、xml资源文件之类的,所以这就有很大的限制,在gradle之前我们要引用带资源文件的Android Library必须要把整个library导入进来进行引用,但是有了gradle之后,Android Library项目可以直接导出成aar,然后其他项目像引用jar的方式直接方便的引用。

具体可参看下图:

  • aar包解压之后的结构:

  • jar包解压之后的目录结构:

怎么样?jar包和aar包的区别很明显吧。

打包apk文件

在android studio中打包apk文件有两种方式:

  • 通过gradle配置输出apk文件

  • 执行Generate singed apk操作获得apk文件

下面我们将分别介绍一下这两种方式的具体步骤,首先我们先看一下如何通过gradle配置的方式,输出apk文件。

android studio中配置打包脚本

  • 配置打包类型
buildTypes {
debug {
// 显示Log
buildConfigField "boolean", "LOG_DEBUG", "true"
//混淆
minifyEnabled false
//Zipalign优化
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources true
//加载默认混淆配置文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//签名
signingConfig signingConfigs.debug
}
release {
// 不显示Log
buildConfigField "boolean", "LOG_DEBUG", "false"
//混淆
minifyEnabled true
//Zipalign优化
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources true
//加载默认混淆配置文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//签名
signingConfig signingConfigs.relealse
}
}

可以发现这里的buildType中配置了release包和debug包,以及各自的签名信息:

singingConfig singingConfigs.release

更加具体的签名信息配置在singingCongis中,下面我们来看一下其实如何设置的

  • 配置签名信息
//签名
signingConfigs {
debug {
storeFile file("aaa.keystore")
storePassword "111111111"
keyAlias "aaa.keystore"
keyPassword "111111111"
}
relealse {
storeFile file("aaa.keystore")
storePassword "111111111"
keyAlias "aaa.keystore"
keyPassword "111111111"
}
}

这样我们就配置好了apk打包的签名信息,然后我们可以打开Build Variants操作框了…

  • 配置Build Variants

这里可以看到我们在mobile module中定义了两个buildType,其中debug和release Type,并且其打包时默认使用的签名信息就是我们刚刚配置的各自的签名信息。

这里需要说明的是android studio中module默认都会有debug和release两个buildType,就算你什么都不配置的话,这里也会存在这两个buildType,而且,除了这两个之外你还可以配置额外的定制化的buildType,比如你想打一个信息的debug01包,使用另外的一套签名信息:

  • 在buildType节点下添加
debug01 {
// 显示Log
buildConfigField "boolean", "LOG_DEBUG", "true"
//混淆
minifyEnabled false
//Zipalign优化
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources true
//加载默认混淆配置文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//签名
signingConfig signingConfigs.debug01
}
  • 添加新的签名信息
debug01 {
storeFile file("bbb.keystore")
storePassword "222222222"
keyAlias "bbb.keystore"
keyPassword "222222222"
}
  • 配置Build Variants

可以发现这时候Build Variant中mobile module多了一个buildType:debug01,其就是我们刚刚配置的debug01 buildType,并且使用的是另外的一套签名信息,若我们选中debug01,则android studio默认run或者是build apk的时候就会编译debug01版本的apk了。

  • 执行run app或者是Build apk操作

这样我们最终就能够输出一个apk格式的安装包了。

执行Generate singned apk操作

除了上面的通过gradle配置的方式生成apk文件,我们还可以执行Generate singned apk操作,通过这样的操作,我们也可以获得一个apk的输出文件,具体步骤如下:

  • 执行Build –> Generate singed apk操作

  • 填写相应的签名信息

  • 选择打包的类型

好吧,上面就是我们所要介绍的打包apk的两种方式。下面我们在讲解一下如何通过android studio打包aar和jar。

android studio如何打jar包

目前通过android studio打包jar,基本有两种方式:

  • 创建module,然后编译完成之后 module中自动的创建了相关的jar文件

这里的classes.jar就是module相关的jar包,我们可以将其更改名称之后拷贝到app下的lib目录中;

  • 另一种方式其实跟第一种方式是一样的,只不过其是通过gradle脚本实现的

app为我们的主工程,librarydemo是我们要将其生成jar包的model.

在librarydemo中加入如下代码:

task makeJar(type: Copy) {
delete 'build/libs/mysdk.jar'
from('build/intermediates/bundles/release/')
into('build/libs/')
include('classes.jar')
rename ('classes.jar', 'mysdk.jar')
} makeJar.dependsOn(build)
//在终端执行生成JAR包
// gradlew makeJar

在Terminal中键入 gradlew makeJar 回车看到如下所示就OK了:

当然在主工程App的build中要加入librarys 这个依赖model:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
compile project(':librarys')
}

(二)android studio如何打aar包

其实打aar包和jar包类似,只不过是其目录变化了而已:

可以看到同样需要其作为library,而且其生成的目录为:/build/output/aar/

好了,以上就是如何通过androd studio打包apk,aar和jar的相关内容了。

Android Studio打包apk,aar,jar包的更多相关文章

  1. Android tips(八)-->Android Studio打包apk,aar,jar包

    文本我们将讲解android studio打包apk,aar,jar包的相关知识.apk包就是android系统的安装包,这里没什么好说的,aar包是android中独有的类库包,而jar包是java ...

  2. android studio 使用gradle 导出jar包,并打包assets目录

    警告:本文年久失修. 随着android studio的升级 ,gradle的升级,严格按照本文的代码去做可能不会成功,希望依然可以作为解决问题的思路. 最近项目在做一个sdk,供别的开发者使用,所以 ...

  3. [转]--android studio 使用gradle 导出jar包,并打包assets目录

    转自: http://www.cnblogs.com/wuya/p/android-studio-gradle-export-jar-assets.html   最近项目在做一个sdk,供别的开发者使 ...

  4. Android Studio 打包APK时,出现3个或多个APK

    Android Studio 打包APK时,原来只会出现一个apk,结果现在出现3个apk,仔细检查了一下项目文件发现: Android Studio 的 buid.gradle文件里有个配置项被更改 ...

  5. Android Studio将引用第三方jar包的library打包成jar包

    在该module的build.gradle中添加 task makeJar(type: Jar) { archiveName 'mysdk.jar' from('build/intermediates ...

  6. Android Studio中如何打JAR包

    Android Studio中对于library类型的Moudle,默认打出来的是AAR包, 但有时候我们的SDK还需要共享给一些其他eclipse的项目使用,这样我们就需要输出JAR包, 可以通过在 ...

  7. 在Android studio中用gradle打 jar 包(Mac下)

    这两天公司要重构项目,以前的项目在eclipse上,准备迁移到Android studio上,需要对项目打包,于是我学习了Android studio中gradle打包的内容.我在公司用的Mac,在家 ...

  8. Android Studio 简介及导入 jar 包和第三方开源库方[转]

    原文:http://blog.sina.com.cn/s/blog_693301190102v6au.html Android Studio 简介 几天前的晚上突然又想使用 Android Studi ...

  9. Android studio打包APK混淆配置

    要在打包APK时加入混淆需要在Module中的buid.gradle中加入如下信息 buildTypes { release { minifyEnabled true shrinkResources ...

随机推荐

  1. Windows Forms 布局篇

    1,锚定功能(Anchor属性) 默认为“Top,Left”,不管窗体大小如果改变,保持相对于窗体左上角的位置. 如果设置为”Top,Bottom,Left,Right”这样,控件的大小将随窗体的大小 ...

  2. 最全Pycharm教程(42)——Pycharm扩展功能之Emacs外部编辑器

    1.主题 介绍怎样将Emacs定义为一个Pycharm外部编辑器. 2.准备工作 (1)Pycharm版本号为2.7或更高 (2)下载了downloadedEmacs并正确安装 3.配置Emacs 打 ...

  3. Css fixed和absolute定位差别

    fixed:固定定位 absolute:绝对定位 差别非常easy: 1.没有滚动栏的情况下没有差异 2.在有滚动栏的情况下.fixed定位不会随滚动栏移动而移动.而absolute则会随滚动栏移动 ...

  4. Android 用SQLite 使用 CursorLoader 中的数据填充列表视图

    我做了简单的测试应用程序基于此示例.有一个按钮,插入到数据库和列表视图的数据.都是在 MainActivity 中.在原来的代码是restartLoader() 仅从调用 onResume() ,但它 ...

  5. ZOJ 2770 Burn the Linked Camp 差分约束 ZOJ排名第一~

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1770 题目大意: 陆逊为了火烧连营七百里,派出了间谍刺探敌情,得之刘备的军营以 ...

  6. xmpp即时通讯协议的特性---长处和缺点!

    xmpp协议的定义? XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性. 因此.基于XMPP的应用具有超强的可扩展性.经过扩展以后的XMPP能够通过发送扩展的信 ...

  7. 【23.58%】【code forces 321E】Ciel and Gondolas

    time limit per test4 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...

  8. 【t057】任务分配

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 现有n个任务,要交给A和B完成.每个任务给A或给B完成,所需的时间分别为ai和bi.问他们完成所有的任 ...

  9. CEPH OBJECTSTORE API介绍

    Thomas是本人在Ceph中国社区翻译小组所用的笔名,该文首次公布在Ceph中国社区.现转载到本人博客,以供大家传阅 CEPH OBJECTSTORE API介绍 本文由 Ceph中国社区-Thom ...

  10. js课程 1-3 Javascript变量类型详解

    js课程 1-3  Javascript变量类型详解 一.总结 一句话总结:js对象点(属性方法),json对象冒号(属性方法).属性和方法区别只有一个括号. 1.json对象中的函数的使用? 函数名 ...