内容简介:在典型的开发周期中,您将使用当您准备好为Android准备的查看默认应用程序清单文件(位于
在典型的开发周期中,您将使用 flutter run
命令行、Android Studio、VS Code中通过 工具 栏运行和调试按钮进行测试。默认情况下,Flutter构建应用程序的 debug
版本。
当您准备好为Android准备的 release 版时,例如要发布到应用商店,请按照此页面上的步骤操作。
检查AppManifest
查看默认应用程序清单文件(位于 <app dir>/android/app/src/main/
中的 AndroidManifest.xml
文件),并验证这些值是否正确,特别是:
-
application: 编辑application标签, 这是应用的名称。 -
uses-permission: 如果您的应用程序代码不需要Internet访问,请删除android.permission.INTERNET权限。标准模板包含此标记是为了启用Flutter工具和正在运行的应用程序之间的通信。
注意: <app dir>
为你的工程目录。
查看构建配置
查看默认[Gradle 构建文件][gradlebuild]”build.gradle”,它位于 <app dir>/android/app/
,验证这些值是否正确,尤其是:
-
defaultConfig:-
applicationId: 指定始终唯一的 (Application Id)appid -
versionCode&versionName: 指定应用程序版本号和版本号字符串。有关详细信息,请参考版本文档 -
minSdkVersion&targetSdkVersion: 指定最低的API级别以及应用程序设计运行的API级别。有关详细信息,请参阅版本文档中的API级别部分。
-
添加启动图标
当一个新的Flutter应用程序被创建时,它有一个默认的启动器图标。要自定义此图标:
- 查看Android启动图标 设计指南,然后创建图标。
-
在
<app dir>/android/app/src/main/res/目录中,将图标文件放入使用配置限定符命名的文件夹中。默认mipmap-文件夹演示正确的命名约定。 -
在
AndroidManifest.xml中,将application标记的android:icon属性更新为引用上一步中的图标(例如<application android:icon="@mipmap/ic_launcher" ...)。 - 要验证图标是否已被替换,请运行您的应用程序并检查应用图标
app签名
创建 keystore
如果您有现有keystore,请跳至下一步。如果没有,请通过在运行以下命令来创建一个:
Linux/Unix:
$ keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key 复制代码
其中 ~/key.jks
为生成keystore的存储路径
Win:
> C: > cd C:\\Users\\ZERO //ZERO为当前用户的用户名 > keytool -genkey -v -keystore C:\\Users\\ZERO\\key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key 复制代码
同样其中 C:\\Users\\ZERO\\key.jks
为生成keystore的存储路径
注意:保持文件私密; 不要将它加入到公共源代码控制中。
注意: keytool
可能不在你的系统路径中。它是Java JDK的一部分,它是作为Android Studio的一部分安装的。有关具体路径,请百度。
引用应用程序中的keystore
创建一个名为 <app dir>/android/key.properties
的文件,其中包含对密钥库的引用:
storePassword=<password from previous step> keyPassword=<password from previous step> keyAlias=key storeFile=<location of the key store file, e.g. /Users/<user name>/key.jks> # key.jks文件的存储路径 复制代码
注意:
- 保持文件私密;
- 不要将它加入公共源代码控制中;
-
storeFile中的路径是以<app dir>/android/app/开始的相对路径,因此为了防止不必要的错误建议使用绝对路径
在gradle中配置签名
通过编辑 <app dir>/android/app/build.gradle
文件为您的应用配置签名
-
替换:
android { 复制代码为:
def keystorePropertiesFile = rootProject.file("key.properties") def keystoreProperties = new Properties() keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) android { 复制代码 -
替换:
buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug } } 复制代码为:
signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } } buildTypes { release { signingConfig signingConfigs.release ndk{ // 必须加入这部分,否则可能导致编译成功的release包在真机中会闪退 abiFilters "armeabi-v7a" } } debug { ndk { //这里要加上,否则debug包会出问题,后面三个为可选,x86建议加上不然部分模拟器回报错 abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86" } } } 复制代码现在,您的应用的release版本将自动进行签名。
$ flutter build apk Initializing gradle... 3.9s Resolving dependencies... 56.0s Running Gradle task 'assembleRelease'... Running Gradle task 'assembleRelease'... Done 118.7s Built build\app\outputs\apk\release\app-release.apk (7.4MB). 复制代码
注意 :
release
包在真机中闪退可能是因为打包时没有引入 arm64
的l ibflutter
的 so文件
导致在 arm64架
构手机上出现“兼容”问题。主要是引用so库的问题arm64cpu架构是可以像下兼容的,简单点就是 arm64
架构的cpu可以使用 arm32的.so
文件。出现问题真正原因是我们在引用so库时(引用的三方库中引用了so库)。
开启混淆
默认情况下 flutter 不会开启 Android 的混淆。
如果使用了第三方 Java 或 Android 库,也许你想减小 apk 文件的大小或者防止代码被逆向破解。
配置混淆
创建 /android/app/proguard-rules.pro
文件,并添加以下规则:
#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
复制代码
上述配置只混淆了 Flutter 引擎库,任何其他库(比如 Firebase)需要添加与之对应的规则。
开启混淆/压缩
打开 /android/app/build.gradle
文件,定位到 buildTypes
块。
在 release
配置中将 minifyEnabled
和 useProguard
设为 true
,再将混淆文件指向上一步创建的文件。
android {
...
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
复制代码
构建一个发布版(release)APK
本节介绍如何构建发布版(release)APK。如果您完成了前一节中的签名步骤,则会对APK进行签名。
使用命令行:
-
cd <app dir>(<app dir>为您的工程目录). -
运行
flutter build apk(flutter build默认会包含--release选项).
打包好的发布APK位于 <app dir>/build/app/outputs/apk/app-release.apk
。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Xcode 编译疾如风系列(二):并行编译
- 编写 MSBuild 内联编译任务(Task)用于获取当前编译环境下的所有编译目标(Target)
- 使用 Visual Studio 编译时,让错误一开始发生时就停止编译(以便及早排查编译错误节省时间)
- Go编译缓存导致C文件修改后未重新编译
- Android Apk反编译系列教程(一)如何反编译APK
- 漫话:如何给女朋友解释什么是编译与反编译
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Pro Django
Marty Alchin / Apress / 2008-11-24 / USD 49.99
Django is the leading Python web application development framework. Learn how to leverage the Django web framework to its full potential in this advanced tutorial and reference. Endorsed by Django, Pr......一起来看看 《Pro Django》 这本书的介绍吧!