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

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

文本我们将讲解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的相关内容了。

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
欢迎转载,转载请注明出处: http://blog.csdn.net/dmk877/article/details/51980734 在上一篇文章中,我们详细讨论了Tween动画的xml的实现以及interpolator的使用,相信通过上篇文章大家对Tween动画的xml属性的配置会有一个详细的理解,当然这篇文章也是承接上篇文章,所以强烈建议先阅读上篇文章: Android开发之Tween(补间动画)完全解析(上) ,这篇文章将从代码的角度实现上篇文章的效果。 如有疑问请留言,如有谬误欢迎批评指正。 Tw

Android闹钟设置的解决方案 - 2016-07-25 14:07:00

Android设置闹钟并不像IOS那样这么简单,做过Android设置闹钟的开发者都知道里面的坑有多深。下面记录一下,我解决Android闹钟设置的解决方案。 主要问题 API19开始AlarmManager的机制修改。 应用程序被Kill掉后,设置的闹钟不响。 6.0以上进入Doze模式会使JobScheduler停止工作。 手机设置重启后,闹钟失效问题。 API19以上AlarmManager机制的修改 API19之前AlarmManager提供了三个设置闹钟的方法,由于业务需求闹钟只需要一次性,所以
start_kernel之前的汇编代码建立了内核临时页表,完成了内核区域的静态线性映射,保证内核可以在舒适的虚拟地址空间(运行地址和链接地址一致)运行。进入start_kernel之后就要准备建立完整的页表映射,这部分工作是在paging_init中完成。 不过在建立完整页表映射之前还需要进行一些准备工作,本文来分析下。 为了简化整个代码流程,便于分析,我的设备内核配置为不使用高端内存,不配置CONFIG_HIGHMEM。bootargs中传给内核的mem=256. 内核版本号:3.4.55 paging

App的打磨之路(下) - 2016-07-25 14:07:48

前言:该文接上两篇博文 App的打磨之路(上) 和 App的打磨之路(中) ,继续描述打包、反编译及加固。 一、打包 每个Android应用在完成后都需要打成APK包,对于单个打包的方式在此就不赘述了,基本IDE都带,只是在对外发布的应用需要配置属于该应用的唯一签名,下文主要讲述需要上传多个市场的情况下怎么批量打包。 1、Maven打包 Maven是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(ProjectLifecycle),一

PendingIntent的内部机制 - 2016-07-25 14:07:48

摘自;http://my.oschina.net/youranhongcha/blog/196933   1 概述         在Android中,我们常常使用PendingIntent来表达一种“留待日后处理”的意思。从这个角度来说,PendingIntent可以被理解为一种特殊的异步处理机制。不过,单就命名而言,PendingIntent其实具有一定误导性,因为它既不继承于Intent,也不包含Intent,它的核心可以粗略地汇总成四个字——“异步激发”。         很明显,这种异步激发常常
Android framework提供了许多标准的工具,来创建有吸引力的、功能丰富的用户图形界面。但是,如果你想要更多的控制权,比如在应用程序的屏幕上绘图,或者冒险进入三维图形,你需要使用不同的工具。通过Android framework提供的OpenGL ES的API提供了一套显示高端的工具,动画图像超出你的想象,许多Android设备的图像处理单元得到了加速(GPUs)。 这节课主要开发一个OpenGL应用程序、包括设置、画对象、移动对象元素、响应触摸输入事件。 这节课的示例代码使用的是OpenGL

来仿一仿retrofit - 2016-07-25 14:07:32

为什么要重复造轮子 在开发领域有一句很流行的话就是 不要重复造轮子 , 因为我们在开发中用到的很多东西早已有很多人去实现了, 而且这些实现都是经过时间和开发者检验过的, 一般不会遇到什么坑, 而如果我们自己去实现的话, 那不仅会增加工作量, 最大的隐患还是我们并不能预见以后是否会遇到大坑. 不过大家注意了吗. 上面 不要重复造轮子 的一个前提是 开发中 , 是的, 这句名言在开发中是适用的, 那在学习阶段的? 我可以大概的告诉你- 忘记这句话! , 为什么 不要重复造轮子 不适合在学习阶段使用呢? 如果我
背景 前面一篇总结了Serializable的序列化与反序列化,现在接着总结XML。主要内容:XML基本的序列化与反序列化方法、一些注意事项、以及自定义了一个XML注解框架(简洁代码,解放双手)。 XML的序列化与反序列化 先与Serializable进行简单的对比: Serializable存储的文件,打开后无法正常查看,安全性高。xml文件可通过文本编辑器查看与编辑,可读性高(浏览器会格式化xml文件,更方便查看),安全性低; Serializable文件通过了签名,只能在自己的程序中反序列化,或RM
每日更新关注 : http://weibo.com/hanjunqiang   新浪微博! iOS 开发者交流QQ群 : 446310206   有问题或技术交流可以咨询! 欢迎加入 ! 这篇直接搬了一份官方文档过来看的 由于之前没用markdown搞的乱七八糟的 所以重新做了一份 后面看到官网的中文文档更新不及时看着英文翻译了一点 搞的更乱了 :( 英文好的直接点右边- 官方OC文档 Realm 是一个移动端的数据库, Realm 是 SQLite 和 CoreData 的替代者。它可以节省你成千上万行

2.3.1 存储数据到data目录中 - 2016-07-25 14:07:09

当应用安装到Android后,系统会根据每个应用的包名创建一个/data/data/包名/的文件夹,访问自己包名下的目录是不需要权限的,并且Android已经提供了非常简便的API可以直接去访问该文件夹。 下面以一个案例来演示data目录的使用。 一、需求 如图1-5 所示,在用户将CheckBox选中的前提下点击登录,就将用户名和密码保存在data文件夹中,在用户不勾选CheckBox的前提下点击登录,就不保存用户名和密码,同时删除data文件中的历史数据。 如果数据已经保存到了data目录中,那么下次