Android Studio打包APK

1.导出APK安装包

如果是首次打包,Create new

单击蓝色对话框右边文件夹📂图标 ,选择密钥保存路径,然后在下方File name对话框中填写您想要名称,再点击OK回到密钥创建对话框。

在此对话框中填写密码(Password)、确认密码(Confirm)、别名(Alias)、别名密码(Password)、别名的确认密码(Confirm)、修改密钥文件的有效期限(Validity)。对话框下半部分只有姓名(First and Last Name)是必填的。

单击OK按钮回到APK签名框,此时Android Studio会自动把密码和别名填上。如果一开始选择的是已存在的密钥文件,则需手动输入密码和别名 。

单击Next进入下一个对话框

对话框上方可选择APK文件的保存路径,对话框中部可选择编译变量(Build Variants),如果是调试用,则编译变量选择 debug 版本;如果是发布用,则选择 release 版本(想要别的手机安装app则选择release版本)。最后点击Create按钮等待即可

切换左上角的 Android 为 Project,此时可以发现app项目下多了个release文件夹,文件夹下有apk文件

点击该apk文件,右键 Open In -> Explorer,就能打开到该apk所在的文件夹

注意: 如果APK文件安装失败,则可能是以下原因导致的:

  • App只能升级不能降级,假如安装包的版本号小于已安装App的版本号,就无法正常安装。版本号在build.gradle.kts中versionCode节点设置
  • 倘若新旧App签名不一致,也会导致安装失败。如之前手机安装了debug类型的App,现在又要安装release版本,就会签名冲突。

2.安装APK

下载夜神模拟器:https://www.yeshen.com/

夜神模拟器默认是平板机型,点击右上角设置图标,可以修改设置,调整机型和分辨率

将刚刚打包好的apk拖到夜神模拟器中

此时相当于将apk装到了手机里,点击该应用,打开即可

3.制作App图标 

点击项目结构图模块名称,右键菜单选择New→Image Asset,弹出如下对话框

此时在左侧Path对话框中,点击文件夹📂图标选择您想要更改的图标,右侧就会自动裁剪显示各规格图标的效果

再点击Next按钮,进入下一页窗口,在点击Finish按钮完成即可

4.APK瘦身

去除冗余功能

  1. 这两个属性中的allowBackup,被设置为true,则代表允许用户备份Apk安装包和应用数据。这样可能会导致用户的隐私被泄露出去,因此建议将此属性值改为false
  2. 第二个属性值 supportRtl ,被设置为true,则支持从右到左的文字系统,像阿拉伯语等就是从右到左书写,但是常用的中文、英文都是从左到右的,因此无特殊情况也建议将此属性值设为false
精简无用资源

打开新项目中模块级别的build.gradle.kts,发现buildTypes节点是下方这样的:

其中的isMinifyEnabled 属性值默认是 false,其意思是是否启用最小化,如果将其设置为true,则Android Studio在打包APK文件会进行如下处理:

  • 压缩代码,移除各种无用实体,包括类、接口、方法、属性、临时变量等。
  • 混淆代码,把类名、属性名、方法名、变量名替换成简短且无意义的名称,例如People类名称替换成a,方法getID替换成b等。

压缩图片大小 

5.规范处理 

版本设置
  • 每个App都有3个基础信息:第一个是App的图标,图标文件为res/mipmap-***目录下的ic_launcher.png;
  • 第二个是App的名称,名称文字保存在res/values/strings.xml的appname当中;
  • 第三个是App的版本号,版本信息包括build.gradle.kts的versionCode与versionName两个参数,其中versionCode为纯数字的版本编号,versionName为带点号的字符串,格式形如“数字.数字.数字”。

其中versionCode的数值越大,表示该安装包的版本越高;versionCode的数值越小,表示该安装包的版本越低。依据当前App的版本号与待安装APK的版本号,系统方能比较得知是否允许升级App。

     至于版本名称versionName,则用来标识每次App升级的改动程度,按照通常的版本名称格式“数字.数字,数字”,第一个数字为大版本号,每当有页面改版或代码重构等重大升级时,大版本号要加1,后面两个数字清零;第二个数字为中版本号,每当要更新局部页面或添加新功能时,中版本号加1,第三个数字清零;第三个数字为小版本号,每当有界面微调或问题修复时,小版本号加1。

像应用包名、应用版本等信息,可从编译配置工具BuildConfig获取,该类提供的几个配置属性说明如下:

  • APPLICATION ID:应用包名。
  • BUILD TYPE:编译类型。为debug表示这是调试包,为release表示这是发布包。
  • VERSION CODE:应用的版本编号。
  • VERSION NAME:应用的版本名称。 

ImageView iv_icon = findViewById(R.id.iv_icon);
iv_icon.setImageResource(R.mipmap.ic_launcher);
TextView tv_desc = findViewById(R.id.tv_desc);
// 应用名称取自app_name,应用包名、版本号、版本名称均来自BuildConfig
@SuppressLint("DefaultLocale") 
String desc = String.format("App名称为%s\nApp包名为%s\nApp版本号为:%d\nApp版本名称为:%s",
                getString(R.string.app_name), BuildConfig.APPLICATION_ID,             
                BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME);
tv_desc.setText(desc);

注意: 

从Android Gradle 插件 7.0.0 开始,出于性能优化的考虑,默认情况下不再自动生成 BuildConfig 类。这是为了加快构建速度,特别是在大型项目中。所以如果我们需要主动生成BuildConfig 类,以下方法可以重新启用它。

在模块级 build.gradle.kts 文件中的 android {} 中添加以下配置:

buildFeatures {
    buildConfig = true
}

此后将代码示例中用到BuildConfig的地方注释,运行程序成功之后,再将用到BuildConfig解注释就不会报错了。

发布模式 

App代码可通过BuildConfig.DEBUG去判断当前是发布模式还是调试模式,值为false表示是发布模式,true为调试模式。

Log工具用于打印调试日志。但是用户不关心App日志,因此除非特殊情况,发布上线的的App应屏蔽所有日志信息。

package com.package.util;import android.util.Log;import com.you.package.name.BuildConfig;public class LogUtil {// 调试模式来自BuildConfig.DEBUG,false表示发布模式,true表示调试模式public static boolean isDebug = BuildConfig.DEBUG;public static void v(String tag, String msg) {if (isDebug) {Log.v(tag, msg); // 打印冗余日志}}public static void d(String tag, String msg) {if (isDebug) {Log.d(tag, msg); // 打印调试日志}}public static void i(String tag, String msg) {if (isDebug) {Log.i(tag, msg); // 打印一般日志}}public static void w(String tag, String msg) {if (isDebug) {Log.w(tag, msg); // 打印警告日志}}public static void e(String tag, String msg) {if (isDebug) {Log.e(tag, msg); // 打印错误日志}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/7020.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssh密钥登录GitHub时一直提示“Error: Permission denied (publickey)”

起因 环境:Windows10 背景:之前就是按照官方说明创建个rsa密钥,在git后台添加上,就行了,近期怎么添加怎么失败,总是“Error: Permission denied (publickey)”的提示! 尝试 各种尝试&#xf…

【玩转全栈】----Django连接MySQL

阅前先赞,养好习惯! 目录 1、ORM框架介绍 选择建议 2、安装mysqlclient 3、创建数据库 4、修改settings,连接数据库 5、对数据库进行操作 创建表 删除表 添加数据 删除数据 修改(更新)数据: 获取数据 1、OR…

软件质量与测试报告5-压力测试 JMeter 与 Badboy

A.百度搜索引擎压力测试 通过在Badboy下执行如下的测试场景来生成压力测试的脚本: a) 在Badboy的地址栏里面输入www.baidu.com,回车; b) 在右下区域打开的百度的主页上输入搜索关键字JMeter,回车; c) 在…

vim如何显示行号

:set nu 显示行号 :set nonu 不显示行号 (vim如何使设置显示行号永久生效:vim如何使相关设置永久生效-CSDN博客)

Python Typing: 实战应用指南

文章目录 1. 什么是 Python Typing?2. 实战案例:构建一个用户管理系统2.1 项目描述2.2 代码实现 3. 类型检查工具:MyPy4. 常见的 typing 用法5. 总结 在 Python 中,静态类型检查越来越受到开发者的重视。typing 模块提供了一种方式…

Linux的基本指令(上)

1.ls指令 语法:ls [选项] [目录或文件] 功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。 常用选项: -a 列出⽬录下的所有⽂件,包括以 . 开头的隐含⽂件。 -d 将…

【数据分享】1929-2024年全球站点的逐日平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标!说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2024年全球气象站点…

算法每日双题精讲 —— 二分查找(山脉数组的峰顶索引,寻找峰值)

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧💪 在算法的…

macOS如何进入 Application Support 目录(cd: string not in pwd: Application)

错误信息 cd: string not in pwd: Application 表示在当前目录下找不到名为 Application Support 的目录。可能的原因如下: 拼写错误或路径错误:确保你输入的目录名称正确。目录名称是区分大小写的,因此请确保使用正确的大小写。正确的目录名…

如何为64位LabVIEW配置正确的驱动程序

在安装 64位 LabVIEW 后,确保驱动程序正确配置是关键。如果您首先安装了 32位 LabVIEW 和相关驱动,然后安装了 64位 LabVIEW,需要确保为 64位 LabVIEW 安装和配置适当的驱动程序,才能正常访问硬件设备。以下是详细步骤&#xff1a…

《Memory Barriers a Hardware View for Software Hackers》阅读笔记

CPU 设计者引入内存屏障(memory barriers)是为了应对在多处理器系统(SMP)中,内存引用重排序可能导致的同步问题。尽管重排序可以提高性能,但在某些情况下(如同步原语),正…

ES设置证书和创建用户,kibana连接es

1、启动好es 2、进入es容器 docker exec -it es /bin/bash 3、生成ca证书 ./bin/elasticsearch-certutil ca 注:两个红方框位置直接回车 4、生成cert证书 ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 注:前两个红框直接回车&am…

【安当产品应用案例100集】034-安当KSP支持密评中存储数据的机密性和完整性

安当KSP是一套获得国密证书的专业的密钥管理系统。KSP的系统功能扩展图示如下: 我们知道商用密码应用安全性评估中,需要确保存储的数据不被篡改、删除或者破坏,必须采用合适的安全方案来确保存储数据的机密性和完整性。KSP能否满足这个需求呢…

STM32项目分享:智能厨房安全检测系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: STM32智能厨房安全检测系统 (资料分…

Poetry shell --> poetry-plugin-shell

当前环境:Poetry (version 2.0.1) python Python 3.11.8 根据:https://python-poetry.org/docs/managing-environments/#bash-csh-zsh 在新版本的 poetry 执行 poetry shell 会报错 这个功能目前需要使用 poetry-plugin-shell 插件 关于 poetry-plugin-s…

第84期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

【JavaEE进阶】Spring留言板实现

目录 🎍预期结果 🍀前端代码 🎄约定前后端交互接口 🚩需求分析 🚩接口定义 🌳实现服务器端代码 🚩lombok介绍 🚩代码实现 🌴运行测试 🎄前端代码实…

基于SpringBoot格式化实体的时间类型以及静态注入依赖

一. 场景描述 在进行前后端交互时,发现实体的LocalDateTime返回的格式是这样的: 这不符合我们日常习惯的格式 “年-月-日 时:分:秒”,于是上网学习了前辈 励碼的文章SSM项目中LocalDateTime格式化最佳实践_localdatetime 格式化-CSDN博客解决…

计算机网络 (59)无线个人区域网WPAN

前言 无线个人区域网(WPAN,Wireless Personal Area Network)是一种以个人为中心,采用无线连接方式的个人局域网。 一、定义与特点 定义:WPAN是以个人为中心,实现活动半径小、业务类型丰富、面向特定群体的无…

TangoFlux 本地部署实用教程:开启无限音频创意脑洞

一、介绍 TangoFlux是通过流匹配和 Clap-Ranked 首选项优化,实现超快速、忠实的文本到音频生成的模型。 本模型由 Stability AI 提供支持🚀 TangoFlux 可以在单个 A40 GPU 上在 ~3 秒内生成长达 34.1kHz 的立体声音频。 二、部署 安装方式非常简单 1…