首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我不能构建apk而不是aar?

构建 APK 和构建 AAR 是针对 Android 应用程序的两种不同的构建方式。

APK(Android Application Package)是一种用于在 Android 设备上安装和运行的应用程序包格式。APK 包含了应用程序的代码、资源文件、配置文件等。构建 APK 的主要目的是将应用程序打包成可安装的文件,以便用户可以在 Android 设备上直接安装和使用。

AAR(Android Archive)是一种用于构建 Android 库项目的文件格式。AAR 包含了库项目的代码、资源文件、配置文件等。构建 AAR 的主要目的是将库项目打包成可供其他 Android 应用程序引用和使用的文件,以便实现代码的复用和模块化开发。

为什么不能构建 APK 而不是 AAR,取决于你的具体需求和场景:

  1. 如果你正在开发一个独立的 Android 应用程序,希望将其打包成可安装的文件,供用户直接安装和使用,那么你应该构建 APK。
  2. 如果你正在开发一个库项目,希望将其打包成可供其他 Android 应用程序引用和使用的文件,以实现代码的复用和模块化开发,那么你应该构建 AAR。

需要注意的是,构建 APK 和构建 AAR 并不是互斥的,你可以根据具体需求同时构建 APK 和 AAR。例如,你可以将一个库项目打包成 AAR,然后将其引用到一个独立的 Android 应用程序中,同时将该应用程序打包成 APK。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云移动应用开发平台:https://cloud.tencent.com/product/madp
  • 腾讯云移动推送服务:https://cloud.tencent.com/product/tpns
  • 腾讯云移动直播服务:https://cloud.tencent.com/product/mlvb
  • 腾讯云移动分析服务:https://cloud.tencent.com/product/mta
  • 腾讯云移动测试服务:https://cloud.tencent.com/product/mts
  • 腾讯云移动智能硬件服务:https://cloud.tencent.com/product/miot
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么应该使用指针不是对象本身

问题 之前一直使用 Java,现在开始转向 C++。...发现使用 C++ 的人经常用指针表示对象,比如像下面这样: Object *myObject = new Object; 不是, Object myObject; 或者在调用成员函数的时候,都会这样...: myObject->testFunc(); 不是, myObject.testFunc(); 有点想不明白为什么这么做?...意思是说你想一直使用某个地址位置的变量,不是它的副本,对于后者,我们更应该使用 Object myObject; 的语法。 你需要很多内存。 大家都知道,栈空间比堆空间小的多。...切片的意思就是说:在函数传参处理多态变量时,如果一个派生类对象在向上转换(upcast),用的是传值的方式,不是指针和引用,那么,这个派生类对象在 upcast 以后,将会被 slice 成基类对象,

1.4K10

为什么推荐大家使用 Nginx 不是 Apache?

无论是 Nginx 还是 Apache 都是 Web 服务器应用,通俗点说我们的网站都是需要 Web 服务器应用来展现给客户的,服务器是供 Web 服务器应用正常稳定的运行的基础。...目前比较主流的 Web 服务器应用也就是 Nginx 和 Apache 了,今天就给大家阐述一下为什么一直都推荐大家使用 Nginx 不是 Apache? ?...有关 Nginx 和 Apache 的介绍就不做赘述了,大家自行百度、谷歌一下就可以了解了,废话不多说了,直奔主题: 1、作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接...Nginx 相对 Apache 的优点 轻量级,同样起 web 服务,比 Apache 占用更少的内存及资源 抗并发,Nginx 处理请求是异步非阻塞的, Apache 则是阻塞型的,在高并发下 Nginx...这里要注意一点,epoll(freebsd 上是 kqueue)网络 IO 模型是 Nginx 处理性能高的根本理由,但并不是所有的情况下都是 epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件

2.4K20
  • 为什么我们选择使用 React 不是 Angular 构建新 UI

    为什么选择 React 当在考虑构建我们新 UI 的不同选择时,React 显然是一个明智的选择,因为它的描述性,高效性和灵活性。...这些封装的组件管理自己的状态,因为组件逻辑是用 JavaScript 不是模板编写的,你可以轻松地通过应用程序传递丰富的数据,不用担心 DOM 中的状态。...使用 React,你应该永远记住,它实际上并不是一个 JS 框架,而是一个用于渲染视图的库。...ReactJS 和 AngularJS 的主要区别在于 React 是以 JS 为中心的, AngularJS 是以 HTML 为中心。...是什么使得 React 与众不同 React 本身不是一个框架。如前所述,它应该被认为是视图渲染引擎或组件模型。 React 提供可重复使用的可配置组件,让您快速入门。

    2.3K30

    为什么我们选择使用 React 不是 Angular 构建新 UI

    为什么选择 React 当在考虑构建我们新 UI 的不同选择时,React 显然是一个明智的选择,因为它的描述性,高效性和灵活性。...这些封装的组件管理自己的状态,因为组件逻辑是用 JavaScript 不是模板编写的,你可以轻松地通过应用程序传递丰富的数据,不用担心 DOM 中的状态。...使用 React,你应该永远记住,它实际上并不是一个 JS 框架,而是一个用于渲染视图的库。...ReactJS 和 AngularJS 的主要区别在于 React 是以 JS 为中心的, AngularJS 是以 HTML 为中心。...是什么使得 React 与众不同 React 本身不是一个框架。如前所述,它应该被认为是视图渲染引擎或组件模型。 React 提供可重复使用的可配置组件,让您快速入门。

    2.7K60

    小白建站为什么更推荐使用WordPress不是typecho?

    但我还是推荐使用wp建站,下面说说的看法。...为什么说WordPress更适合新手 觉得现在用1h1G的人应该很少很少了,看你们聊天动不动就是32H起步,所以Wp肯定是无压力的,而为什么主推WP呢?...首先,wordpress基础功能多,就拿媒体库来说,就是ty不曾拥有的,由于我刚开始使用的就是wp,所以压根不明白,为什么要弄什么图床,虽然后面搭了个图床,但是还是喜欢直接放wp媒体库。...其次,WordPress在不装任何插件下,有经典编辑器和可视化编辑器,写文章时可以直接排版,直接上传图片,ty则需要通过链接的方式插入,或者更新文章用mark编辑器书写。...另外,如果你想构建小程序,app等等,肯定也是优先考虑WP,没有为什么。 结语 其实,不管什么博客还是cms,并没有谁好谁坏的区别,自己习惯就是做好的,所以,别太在意用什么,好好更新文章吧。

    1.3K30

    在应用开发中,为什么选择 Flutter 不是 React Native ?

    作为一位开发人员,想在本文中与大家聊聊跨平台开发领域的两大核心选项——Flutter 与 React Native 框架,并介绍自己为什么更偏爱 Flutter。...双方都能帮助开发人员更快、更轻松地构建并发布应用程序,但作为成熟度更高的框架选项,React Native 的社区规模更大; Flutter 则提供更多内置工具,可帮助用户减少对第三方工具的依赖。...Flutter 不仅可用于构建跨平台移动应用与 Web 应用,同时也可用于构建桌面应用程序。 除了代码库可重用性这一核心价值主张之外,Flutter 在其他方面也有着自己的独特亮点。...为什么更倾向于 Flutter 一段时间以来,React Native 一直是全球领先的跨平台开发框架。而且在 Flutter 出现之前,React Native 可谓无可匹敌。...React Native 需要使用格拉器或中间件才能通过 JavaScript 与原生组件进行通信, Flutter 则完全不需要。这不仅可以加快开发速度,更可以优化运行速度。

    3.3K20

    【JS】332- 为什么更喜欢对象不是 switch 语句

    正文从这里开始~~~ 最近(或者不是最近,这完全取决于您什么时候阅读这边文章),正在跟我的团队伙伴讨论如何去处理这种需要根据不同的值去处理不同的情况的方法,通常对于这种情况下,人们喜欢使用 switch...在本文中将重点介绍第三种方式 (更为喜欢的方法),即使用对象进行快速地查找。...来说并不是很好),因为大括号不是强制性的,重复声明会导致错误变量,让我们看看当我们执行下面的代码时会发生什么: switch ('second') { case 'first':...console.log('infinite'); } 控制台将输出以下内容: first second has access to first second infinite 试想一下,由此引起的错误和突变是如此之多...认为我们应该更关心为什么我们需要一个返回布尔值,未定义值或字符串的函数,这里存在严重的不一致性,无论如何,对于这样一个非常棘手的情况这也只是一个可能的解决方案。

    1.3K40

    【SaaS云】SaaS洞察(01):为什么在SaaS市场选择美国不是中国?

    很多朋友问我为什么不在中国创办 SaaS 公司。中国是一个大市场,你是中国人。在中国,你知道如何经营企业,如何适应当地文化。在中国创业有很多好处。 长期以来,全世界都习惯于从硅谷模仿。...为了评估未来趋势,风险投资家需要数据不是故事。中国有 3,000 家 SaaS 公司可以在互联网上找到,另外还有 4,000 到 6,000 家可能从数据中丢失。...为什么客户愿意付款?很多SaaS产品没有差异化竞争,只能用低成本的策略打败它们。整个行业的健康状况不佳。 3、美国市场一般接受在线支付和自下而上的购买。...客户通过使用免费版本和试用版来决定是否订购 SaaS 产品,而且购买的决策者通常是公司员工,不是 CEO/CIO。...推动公司增长的是产品,不是销售。这是国际业务的理想选择。在上海,也可以发展。如果每个客户都必须触摸 FAE 才能购买,作为外国人不适合

    71041

    Gradle依赖管理解析

    一个过滤器可以保证只有JAR 文件会被依赖,不是简单地依赖文件夹中的所有文件: dependencies { 这意味着所有由Android Studio 创建的Android 项目,你都可以将JAR...文件放置在libs 文件夹中,其会自动包含在构建路径和最终的APK 中。...在构建依赖库时,模块目录下的build/output/aar/ 文件夹将会生成.aar 文件。...该配置不仅会将依赖添加至类路径,还会生成对应的APK。 如果依赖使用apk 配置,则该依赖只会被打包到APK不会添加到编译类路径。provided 配置则完全相反,其依赖不会被打包进APK。...前面我们多次提到过构建variants,我们会在《Gradle for Android 中文版》中解释什么是构建variants,为什么它们非常重要。

    2.1K20

    创建Android库的方法及Android .aar文件用法小结

    不过,Android 库将编译到您可以用作 Android 应用模块依赖项的 Android 归档 (AAR:Android Archive Resource) 文件,不是在设备上运行的 APK。...模块的整个结构仍然相同,但是现在它将作为 Android 库运行,构建也将创建一个 AAR 文件,不是 APK。...新建的Library与正常的Application最大区别是module build.gradle中是apply plugin: ‘com.android.library’ 不是 apply plugin...您的应用模块现在可以访问 Android 库中的任何代码和资源,库 AAR 文件在构建时已捆绑到您的 APK 中。...在用AS的过程中,你会发现有aar这么个东西,经查阅资料了解到,aar是android归档文件,想全称应该是:Android Archive。 他们两个有什么区别呢?

    3K10

    Mobile_xxx:transformClassesWithJarMergingForRelease‘

    看到错误,检查了一下项目,原来的项目中的GSON是直接将源码拷贝到了项目中,后来引入了一个第三方的视频监控sdk,看了一下 这个sdk中也包含这个 一个在项目里面 一个在jar包里面,删除哪个都会引起相关联的错误...文件,注意并不能像 方式2 那样自动引用全部的aar需要对每个aar分别进行引用。...compile(name: 'aar_file_name', ext: 'aar') 方式5:引用库类型的项目 compile project(':xxxsdk') 方式6:仅仅在编译时使用,...但最终不会被编译到apkaar里 provided files('libs/glide-3.7.0.jar') 所以后来将项目中的gson源码删除掉,改为第一种引用三方库方式,这样做的目的就是可以在...3.APK 只会打包到apk文件中,不参与编译,所以不能再代码中直接调用jar中的类或方法,否则在编译时会报错 4.Test compile Test compile 仅仅是针对单元测试代码的编译编译以及最终打包测试

    80120

    Gradle For Android(3)--管理依赖关系

    不同的是,Application工程会生成出来一个APKLibrary会生成出来一个AAR文件。这个文件可以作为Project的Library引用。...文件 如果希望创建一个Library在各个Application中复用,则可以构建出来一个AAR文件,并且作为依赖添加到Project中。...AAR文件在assemble任务执行后,会在build/output/aar/目录下生成,只要Module构建完成后,也都会生成。...每一个配置都不仅仅会添加到classpath中,而是会被添加到APK中。 apk配置项仅仅会把依赖库添加到包中,不会把它添加到编译的classpath中。...这些配置项只会在执行test相关的任务时,才会使用,比如说使用JUnit或者Espresso的时候,会把相关的Framework添加进去,并且只会在testApk中才会打包这些Framework,不是

    1.5K30

    Atlas-框架入门

    awb: android wireless bundle的缩写,实际上同AAR类似,是最终构建整包前的中间产物。每个awb最终会打成一个bundle。...从上图也可以看出基于Atlas构建后大致工程的结构: 首先有个构建整体APK工程Apk_builder,里面管理着所有的依赖(包括atlas)及其版本,Apk_builder本身可能不包含任何代码,只负责构建使用...构建时并未打到apk内部,而是单独放在了云端;同时远程bundle的限制条件是第一次被触发的前提是bundle内的Activity需要被start,此时基于Atlas内的ClassNotFoundInterceptorCallback...如上所示我们可以知道,我们所要验证的结果是主站app咱mainDex中,插件都是以so的形式存储在APK的lib文件夹下,我们的工程目录如下 ?...工程中包含主app和插件firstbundle 我们打出的包中lib中的内容为(原谅没有mac。。。不能输出详情图,各位有心的可以去验证): ? 支持,我们要分析atlas的环境搭建已经没问题了。

    1.1K20

    AndroidStdio1_2

    不过,Android库将编译到可以用作Android应用模块依赖项的Android归档(AAR)文件,不是在设备上运行的APK。...• 构建存在多个APK变体(例如免费版本和付费版本)的应用并且需要在两种版本中使用相同的核心组件。...这10多个项目都依赖这个库,不是10多个项目都写一遍网络请求的代码,并且用库的方式方便修改。 当访问网络的代码有bug的时候,只需要修改这个库文件的代码就好了。 如何创建一个模块 ? 点这里 ?...• 每个库模块都会创建自己的R类:在构建相关应用模块时,库模块将先编译到AAR文件中,然后添加到应用模块中。因此,每个库都有其自己的R类,并根据库的软件包名称命名。...由于测试证书通过构建工具创建并且在设计上不安全,大多数应用商店(包括Google Play商店)都不接受使用调试证书签名要发布的APK

    1.8K20

    常见的Android编译优化问题

    这也就是之前为什么经常说编译产物其实是不太可以被信任的。 方法签名变更,底层仓库的方法变更但是上层模块并没有跟随一起重新编译导致的这个问题。 常量优化,将一些常量的调用点直接替换成常量的值。...这个引用的文件就如上图所示,是一个debug buildType中的,所以并不是所有的apk中都会存在这部分代码。...这个就是事情大概的起因和经过,但是各位有没有想过为什么会发生这个问题吗。这个是不是我们的pipeline出现了bug,导致了这种问题无法被识别出来了呢。...其实这个问题一出现就已经知道大概率是由空导包优化导致的这个问题,因为在pipeline检查的时候,检测的apk产物中确实不存在这个导包。...有一次因为需求变更,我们更改了这个静态变量的值,然后呢就把这个需求提测了。之后测试反馈给我为什么这边的这个值没有变化啊。 的天,当时就是这样,发生了什么情况。

    76720

    ProGuard 在 Android 上的使用姿势

    重要的是去理解为什么您会收到这些警告以及您在构建时是否真的缺少这些类。 现在您可能会尝试使用 -ignorewarnings 选项直接忽略所有的警告,但这通常不是个好注意。...ProGuard 和 混淆后的堆栈 之前提及到,在构建过程中 ProGuard 会在处理类文件时输出映射关系和日志文件。当您需要保留构建产物时,您应当保存好这些文件和 APK 在一起。...这些映射文件不能被其他的构建所使用,只会在与它们一起生成的 APK 配合使用时才能确保正确。有了这些映射关系,您才能有效地 debug 用户设备的发生的崩溃。...这样的话当您看 ANRs & crashes 页面时,上报的堆栈都会现实真实的类名、方法名和行号不是缩短的混淆后的那些。...不过有个更好的方法,第三方库的维护者们如果发布的库是 AAR ,那么可以指定规则打包在 AAR 中并会在应用构建时自动暴露给构建系统,通过添加下面几行代码到库模块的 build.gradle 文件中:

    2.6K40

    Git,Shell,和面向运气的编程

    之类的吐槽,说实话自己也很惊讶,为什么可以一直无视这些轻而易举的事情。 最近开始更多的看技术相关的东西,试着去理解一些之前觉得太难太烦的东西,发现其实真的静下心来了解之后,很多也不过如此。...于是一再,再而三的栽进类似的坑里。 偶会有一起开发的同事问:这里是不是可以这么做/那么做,会更好;这里是不是有点问题?之类。...因为一旦去了解,去学习,发现很多之前觉得模糊不清的东西变得渐渐清晰,彼此之间开始出现联系,不是一个个僵硬的知识点,编程这个工作中吸引的那种优雅的东西又再次出现了。...直到最近,需要在两个项目下执行编译/安装/复制aar包之类的操作,cd过来cd过去,自己都要烦死了,才终于写了个小脚本,在一个目录下把编译aar,拷贝aar到另一个目录,在另一个目录编译apk,安装编译好的...直到最后才发现,第一步打包aar的命令已经失败了,但是之后的命令继续执行,于是改来改去,装的都是一开始的apk! 原来只需要在脚本最前面设置一下错误退出就好了!

    18740
    领券