flutter 的打包和发布
Android的打包和发布
1.1 填写应用相关的信息
1.2 应用的签名
1.3 打包应用程序
- apk
- aab
发布到应用商城里面 Google 小米啊 你可以把这个东西发布到对应的商城里面
Android 基本信息填写
虽然这个东西很麻烦 但是它只需要做一次就可以了
- 应用的appid
- 应用的名称
- 应用的Icon
- 应用的Launcher
版本号 flutter在哪里配置版本信息的呢
我们可以在这里配置版本信息
如果我们第一次配置版本信息的时候我们会很疑惑 什么意思呢
为什么要这样写呢
为什么 你写个 1.0.0 版本就可以了 你写个1.0.0 + 1是什么意思呢
这个是什么意思呢 在Android中版本分成两个版本
- versionCode: 内部管理的版本号
- versionName: 用户显示的版本号
这个是内部管理的版本
比如我们现在开发的一个应用举一个例子
我们已经开发好了一个版本 我们现在已经打包完了 但是构建完以后 我们发现我们构建的版本是有问题的
这个时候我们会把这个1.0.0+1 改成1.0.0+2 这样我们就可以运行了
所以这个后面的版本就是一个内部版本的意思
ios里面 应用的版本 分为version和build
- version
- build 如果我们改了一版本 然后我们构建这个项目 但是如果我们直接构建我们是构建不成功的 我们需要将这个东西改一下我们才能将他构建成功
所以这里是这样的作用
越前面的版本就是越大的版本
网络请求
我们最后打包出来的这个应用程序我们 是不能进行网络请求的
我们最后打包出来的这个 应用程序 最后是不能直接发送网络请求的 no不能发送
我们默认在release是不能发送网络请求的
我怎么给大家证明这个东西呢
我们来到这个Mainifest文件
因为我们需要去配置它的权限
这个里面它有一个东西
你看这里如果这里有一个network我们就可以访问网络请求了
<uses-permission android:name="android.permission.INTERNET"/>
如果我们配置 了我们就可以访问网络了
这样看我们好像是对他进行了配置的啊 但是其实是没有的 因为我们 需要在mian文件里面对这个东西进行配置
但是我希望它能够访问网络甚至希望访问它的位置
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.catefavor">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
</manifest>
这里我们就把这个权限复制过去
配置完这个信息 我们就可以访问网络和位置信息了
应用签名
以前我们这个东西是不需要这个东西的
android系统在安装apk的时候 首先会检验apk的签名的 如果发现其那名不存在 或者校验签名失败 会拒绝安装
所以我们 要对应用程序签名
我们需要生成一个签名文件
我们可以在window系统上执行这个命名
- 注意这个地方有一个路径 这个路径就是保存的 key文件
keytool -genkey -v -keystore c:/Users/USER_NAME/key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key
如果是在macOS或者在Linux上面
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
我就给它执行这样一个命令 然后它会让你输入这个口令
我这里 就用jsptest
这个就是生成的文件
然后它会让你写协议一些信息
这些信息一般是让你填公司的信息
说明我们这里生成的文件就已经有了
这里 如果我们要用的话就要依赖这个文件
我们要创建一个 /android/properties 来对它做一个引用 它包含了密匙库的位置
我们在andriod创建一个文件
然后这个文件填写的信息就是固定的
storePassword=<上一步骤中的密码>
keyPassword=<上一步骤中的密码>
keyAlias=key
storeFile=<密钥库的位置,e.g. /Users/<用户名>/key.jks>
当然这个文件不建议提交到代码仓库里面
所以我们最好对.gitigonre来做一个忽略
然后我们来找到这个代码
找到这个文件
然后在上面 复制这段代码
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
这段代码的作用就是读取这个 key.properties
同时我们还需要改一个东西
你会发现这个东西默认是 debug
我们这里要 把这段代码给它删除掉
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 keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
这个时候我们就 能对这个东西进行自动签名
我们的android支持两种打包模式
我们用户在安装的时候几乎都是使用的apk
还有一种就是AAB (官方推荐)
Android App Bundle
aab这个会动态生成用户设备需要的 apk文件
比如我们配置启动图 我们需要配置很多个 图 但是最后用的就只有适合设备的 图片
其实我们只需要使用对应的 一张 所以其实其他的启动图是没有必要使用的
如果我们使用aab就会根据用户的设置 来对应安装对应的设备
这样我们就可以根据这个设置信息来安装对应的程序来达到节省 设备空间的目的
如果是aab文件 他就是执行一个flutter build appbundle的命令
他就是这么一个东西
我们执行 flutter build apk 就会生成对应的apk文件
You are building a fat APK that includes binaries for android-arm, android-arm64, android-x64.
If you are deploying the app to the Play Store, it's recommended to use app bundles or split the APK to reduce the APK size.
To generate an app bundle, run:
flutter build appbundle --target-platform android-arm,android-arm64,android-x64
Learn more on: https://developer.android.com/guide/app-bundle
To split the APKs per ABI, run:
flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi
Learn more on: https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split
Running Gradle task 'assembleRelease'...
Calling mockable JAR artifact transform to create file: C:\Users\Lenovo\.gradle\caches\transforms-2\files-2.1\970f20739b21694cc052d0a5bed5f9a0\android.jar with input C:\Users\Lenovo\AppData\Local\Android\sd
k\platforms\android-28\android.jar
Removed unused resources: Binary resource data reduced from 4433KB to 4424KB: Removed 0%
Running Gradle task 'assembleRelease'...
Running Gradle task 'assembleRelease'... Done 277.0s (!)
√ Built build\app\outputs\apk\release\app-release.apk (21.5MB).
这样就是打包成功了
这样我们就有这个 apk 我们就可以发布了
android的发布平台就很多了
我们构建的所有 包都是在build里面
在build里面有一个app
这个里面有一个 apk
这个东西就是release
倒是我们就把这个文件发给产品经理
同样我们也打包一下这个aab文件
如果你要到Google去发布的话 是需要付钱的
对我来说也是没有什么用的