Android Studio编译及调试知识
文章目录
- Android Studio编译kotlin项目
- Android Studio编译Java和kotlin混合项目的过程
- gradle打印详细错误信息,类似这种工具的使用
- Android apk 从你的代码到APK打包的过程,APK安装到你的Android手机上的过程,最后安装好的形态,以及安装在那个位置,安装目录、数据目录
- 从代码到APK打包的过程
- APK安装到Android手机上的过程
- 安装好的形态和安装位置
- 安装目录和数据目录
Android Studio编译kotlin项目
- 资源编译
在Android Studio中,资源文件位于res
目录下,包括布局文件、图片、字符串等。当我们进行资源编译时,Android studio会将这些资源文件转换为二进制格式,并生成相应的R.java
文件,该文件用于在代码中引用资源。 - 代码编译
Android Studio会使用Kotlin编译器将Kotlin代码编译成Java字节码,生成的 .class 文件,Kotlin编译器确保你的代码符合Kotlin语言的语法和规则,并将其转换为Java字节码,这样JVM(Java虚拟机)就可以执行它了。编译结果位于build/intermediates/javac
目录下。 - 生成 APK
通过资源编译和 Java 代码编译,Android Studio 将生成一个 APK文件。APK 是 Android 应用的打包文件,包含应用的代码、资源文件和配置信息。APK文件位于buildoutputs/apk
目录下 - 打包签名
最后一步是将生成的APK文件进行打包签名。签名是为了验证应用的来源和完整性。Android Studio提供了签名工具,可以方便地对APK进行打包签名。进行签名。签名后的APK文件可以在安卓(Android)设备上进行安装和运行。
Android Studio编译Java和kotlin混合项目的过程
- 资源编译
在Android Studio中,资源文件位于res
目录下,包括布局文件、图片、字符串等。当我们进行资源编译时,Android studio会将这些资源文件转换为二进制格式,并生成相应的R.java
文件,该文件用于在代码中引用资源。 - 代码编译
Gradle首先会调用Kotlin编译器来编译.kt文件,生成Java字节码。然后,Gradle会编译.java
文件,同样生成Java字节码。Gradle会确保所有的依赖项都被正确地解析和包含在编译过程中。编译结果位于build/intermediates/javac
目录下。 - 生成 APK
通过资源编译和 Java 代码编译,Android Studio 将生成一个 APK文件。APK 是 Android 应用的打包文件,包含应用的代码、资源文件和配置信息。APK文件位于buildoutputs/apk
目录下 - 打包签名
最后一步是将生成的APK文件进行打包签名。签名是为了验证应用的来源和完整性。Android Studio提供了签名工具,可以方便地对APK进行打包签名。进行签名。签名后的APK文件可以在安卓(Android)设备上进行安装和运行。
分析编译过程,以便更好地解决报错,知道编译过程处于哪个阶段,更明确错误类型
gradle打印详细错误信息,类似这种工具的使用
- 启用Gradle的调试日志
获取 Gradle 构建过程的详细日志,在项目的gradle.properties
文件中设置 :
org.gradle.debug=true
这启用 Gradle 的调试日志,并在构建时打印出更多的信息
- 使用命令行构建
通过在命令行中执行Gradle
构建,可以获得更详细的输出信息。打开终端或命令提示符,导航到项目根目录,然后运行以下命令:
./gradlew build --stacktrace
--stacktrace
选项会在构建失败时打印出完整的堆栈跟踪信息,帮助定位问题。还可以使用 --debug
选项来获取更详细的构建日志
- Android Studio 中的 Gradle 视图: Android Studio 内置了 Gradle 视图,可以通过点击工具栏上的
"View" -> "Tool Windows" -> "Gradle"
来打开它。在这个视图中,可以看到构建任务的详细信息,包括依赖项解析、任务执行等。如果构建失败,Gradle 视图通常会显示错误信息 - 使用
Gradle Build Scans
:Gradle Build Scans
是一个插件,可以为 Gradle 构建生成详细的可视化报告。通过在项目的build.gradle
文件中添加插件依赖和配置,可以启用Build Scans
。构建完成后,可以通过扫描二维码或在浏览器中打开 URL 来查看构建报告。这个报告会提供关于构建过程的详细信息,包括任务执行时间、依赖项解析等
要启用Gradle Build Scans
,你需要在项目的build.gradle
文件中添加以下配置:
buildscan {termsOfServiceUrl = "https://gradle.com/terms-of-service"termsOfServiceAgree = "yes"
}
然后,在命令行中执行构建时,添加 --scan
选项:
./gradlew build --scan
构建完成后,Gradle 会提供一个 URL,你可以通过该 URL 在浏览器中查看构建报告
Android apk 从你的代码到APK打包的过程,APK安装到你的Android手机上的过程,最后安装好的形态,以及安装在那个位置,安装目录、数据目录
从代码到APK打包的过程
- 编写代码:开发人员使用Java语言(或Kotlin)和Android开发工具包(Android SDK)编写应用程序的代码。这些代码包括应用程序的逻辑、界面设计、数据处理等。
- 资源管理:管理应用程序所需的资源,如图像、音频文件、布局文件等。这些资源文件需要放在特定的文件夹中,并使用相应的资源标识符在代码中访问。
- 构建配置:设置一些构建配置,如应用程序的包名、版本号、签名证书等。这些配置信息对于打包和安装应用程序是必要的。
- 编译代码:完成了代码和资源的编写,他们需要将代码编译成Dalvik(Android平台的虚拟机)字节码。编译后的字节码被打包在
classes.dex
文件中。 - 打包资源:代码被编译,需要将所有资源打包成一个名为APK(Android Package)的文件。APK文件是一个压缩包,包含了应用程序的所有代码和资源文件。
- 生成签名证书:在发布应用程序之前,需要为APK文件生成一个签名证书。签名证书用于验证应用程序的来源和完整性,确保应用程序在传输过程中没有被篡改。
- 签名APK:使用签名证书将APK文件签名。签名后的APK文件才能被安装到Android设备上。
APK安装到Android手机上的过程
- 传输APK文件:首先,需要将APK文件传输到Android设备上。这可以通过多种方式实现,如通过USB连接、下载到设备、或其他文件传输方法。
- 安装APK:在Android设备上,用户可以通过文件管理器或应用商店找到APK文件,并点击安装。此时,Android系统会开始解压缩APK文件,并准备安装应用程序。
- 验证签名:在安装过程中,Android系统会验证APK文件的签名。如果签名有效且APK文件没有被篡改,安装过程将继续。
- 安装应用程序:验证通过后,Android系统会将应用程序安装到设备的存储空间中。应用程序的文件和数据通常存储在设备的内部存储或外部存储中。
安装好的形态和安装位置
安装好的应用程序通常以应用程序图标的形式出现在设备的桌面或应用列表中。用户可以通过点击图标来启动和使用应用程序。
应用程序的安装位置取决于设备的存储配置和用户的设置。在大多数情况下,应用程序安装在设备的内部存储中。内部存储通常分为系统分区和用户数据分区。系统分区存储了Android操作系统和预装应用程序,而用户数据分区则用于存储用户安装的应用程序和数据。
安装目录和数据目录
- 安装目录:应用程序的安装目录通常位于设备的内部存储中,路径类似于
/data/app/
包名。在这个目录下,存储了应用程序的APK文件、运行时产生的数据和其他相关文件。 - 数据目录:应用程序的数据目录通常位于设备的内部存储中,路径类似于
/data/data/
包名。在这个目录下,应用程序可以存储用户的设置、配置文件、数据库等持久化数据。这些数据对于应用程序的正常运行和用户体验至关重要。
相关文章:

Android Studio编译及调试知识
文章目录 Android Studio编译kotlin项目Android Studio编译Java和kotlin混合项目的过程gradle打印详细错误信息,类似这种工具的使用Android apk 从你的代码到APK打包的过程,APK安装到你的Android手机上的过程,最后安装好的形态,以…...

Fastjson 1.2.24 反序列化导致任意命令执行漏洞复现(CVE-2017-18349)
写在前面 CVE-2017-18349 指的是 fastjson 1.2.24 及之前版本存在的反序列化漏洞,fastjson 于 1.2.24 版本后增加了反序列化白名单; 而在 2019 年,fastjson 又被爆出在 fastjson< 1.2.47 的版本中,攻击者可以利用特殊构造的 …...
Spring Boot 注解教程
Spring Boot 注解教程 在 Spring 和 Spring Boot 的世界里,注解(Annotations)起着至关重要的作用。它们为开发者提供了声明式编程的能力,大大简化了 Spring 应用的开发过程。在这篇博客中,我们将探讨 Spring Boot 中的…...

Day32-计算机基础2
Day32-计算机基础2 1. 什么是网络拓扑(Network Topology)?2. 网络拓扑3种经典模型2.1 网络拓扑结构-总线型2.2 网络拓扑结构-环形2.3 星型:2.4 网络拓扑结构总结 3.OSI网络模型概念*****3.1 OSI的概念:open system interconnect 开放系统互连…...

Stable Diffusion WebUI 中英文双语插件(sd-webui-bilingual-localization)并解决了不生效的情况
本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 大家好,我是水滴~~ 本文介绍一款中英文对照插件 sd-webui-bilingual-localization,该插件可以让你的 Stable Diffusion WebUI 界面同时显示中文和英文,让我…...

AndroidStudio连不上adb报错ADB Connection Error
之前笔者一直通过AndroidStudio来看日志,也一直用的一套自己的SDK,用了好几年了。 但是突然有一天,AndroidStudio启动后就弹出警告窗:ADB Connection Error,如下: 在Event Log面板还持续性的输出&#x…...
Java程序员常用网站(推荐)
文章目录 一、下载网站1 Jdk下载2 清华大学开源软件镜像站2.1 Mysql下载 3 常见工具3.1 typora markdown文档编辑器3.2 Apifox 软件测试工具3.3 GIT3.4 Maven3.5 PDF转word3.6 office3.7 xmind 思维导图3.8 draw.io 画图 4 Java 技术书籍大全 PDF5 Java 8 编程思想中文版6 GitH…...

mq基础类设计
消息队列就是把阻塞队列这样的数据结构单独提取成一个程序独立进行部署。——>实现生产者消费者模型。 但是阻塞队列是在一个进程内部进行的; 消息队列是在进程与进程之间进行实现的, 解耦合:就是在分布式系统中,A服务器调用B…...

【Node.js从基础到高级运用】二、搭建开发环境
Node.js入门:搭建开发环境 在上一篇文章中,我们介绍了Node.js的基础概念。现在,我们将进入一个更实际的阶段——搭建Node.js的开发环境。这是每个Node.js开发者旅程中的第一步。接下来,我们将详细讨论如何安装Node.js和npm&#…...

kafka查看消息两种方式(命令行和软件)+另附发送消息方式
1、命令行方式 ①找到kafka安装文件夹 ②执行命令 #指定offset为指定时间作为消息起始位置 kafka-consumer-groups.sh \ --bootstrap-server 20.2.246.116:9092 \ --group group_1 \ --topic lanxin_qiao \ --reset-offsets \ --to-datetime 2023-07-19T01:00:00.000 \ -exe…...
设计模式 单例模式
单例模式就是在整个程序运行的过程中,这个类的实例化对象只有一个。 单例模式和private static 有密切的关系。 举一个例子: 一个wife,在法律允许的范围内,只能有一个。 public class Wife{private static Wife wife null; //…...

使用 Mendix 中的 OIDC 模块集成 Azure AD SSO
前言 在当今快速发展的数字化世界中,企业追求高效率和灵活性已成为常态。Mendix,作为一个先进的低代码开发平台,正是企业快速响应市场需求、加速数字化转型过程的利器。通过其直观的可视化开发环境,即使是非技术背景的用户也能设…...

day12_SpringCloud(Gateway,Nacos配置中心,Sentinel组件)
文章目录 1 Gateway组件1.1 Gateway简介1.2 Gateway入门1.3 网关路由流程图1.4 路由工厂1.5 过滤器1.5.1 过滤器简介1.5.2 内置过滤器1.5.3 路由过滤器1.5.4 默认过滤器1.5.5 全局过滤器1.5.6 过滤器执行顺序 2 Nacos配置中心2.1 统一配置管理2.2 Nacos入门2.2.1 Nacos中添加配…...
【基于springboot+Vue+Element ui的电影推荐之协同过滤算法简单实现】
基于springbootVueElement ui的电影推荐之协同过滤算法简单实现 1.基于用户的协同过滤算法的简单设计与实现1.1获取某个用户的评分矩阵1.2获取该用户与其他用户的相似度矩阵1.3获取两个用户之间的相似度并存储1.4返回推荐列表 2.基于物品的协同过滤算法的简单设计与实现2.1计算…...

签约仪式如何策划和安排流程?如何邀约媒体现场见证报道
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 签约仪式的策划和安排流程,以及邀约媒体现场见证报道,都是确保活动成功和提升影响力的关键环节。以下是一些建议: 签约仪式的策划和安排流程 明确目标…...

k8s-生产级的k8s高可用(1) 24
高可用集群 实验至少需要三个master(控制节点),一个可以使外部可以访问到master的load balancer(负载均衡)以及一个或多个外部节点worker(也要部署高可用)。 再克隆三台主机 清理并重启 配置两…...
python中lambda简介及用法
什么是lambda? lambda是python中的一个关键字,它用于创建匿名函数,也就是没有名字的函数。lambda函数通常用于一些简单的操作,比如作为参数传递给其他函数,或者作为返回值返回给调用者。lambda函数的语法如下…...

AI新工具 百分50%算力确达到了GPT-4水平;将音乐轨道中的人声、鼓声、贝斯等音源分离出来等
1: Pi 百分50%算力确达到了GPT-4水平 Pi 刚刚得到了巨大的升级!它现在由最新的 LLMInflection-2.5 提供支持,它在所有基准测试中都与 GPT-4 并驾齐驱,并且使用不到一半的计算来训练。 地址:https://pi.ai/ 2: Moseca 能将音乐…...
websocket前端应用
基本了解 首先要对websocket有一个基本了解:WebSocket是一种在Web浏览器和Web服务器之间创建持久连接的技术。它允许在客户端和服务器之间进行全双工通信,而不需要在每次通信时都发起新的HTTP请求。主要作用包括实时通信、减少延迟、减少宽带消…...
SpringMVC05、结果跳转方式
5、结果跳转方式 5.1、ModelAndView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 . 页面 : {视图解析器前缀} viewName {视图解析器后缀} <!-- 视图解析器 --> <bean class"org.springframework.web.servlet.view.InternalResourc…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...