Flutter项目打包成安卓apk详解来了(解决安装没网络问题)

Flutter项目打包成安卓apk步骤:
  1. cmd使用keytool创建 keystore
  2. 创建一个名为key.properties的文件
  3. 编辑/android/app/build.gradle文件配置签名
  4. 替换android/app/src/main/res文件夹内各尺寸打包图片logo
  5. 配置联网权限等一系列你需要的权限
  6. cmd项目目录运行:flutter build apk

1.cmd使用keytool创建 keystore

温馨提示: 如果没有keytool命令说明sdk没安装好
桌面路径打开cmd命令行:输入如下字符(最好输入英文字符
更改下面中文处即可!

keytool -genkey -v -keystore 自定义.keystore -alias 自定义别名 -keyalg RSA -keysize 2048 -validity 10000 -storepass 自定义密码 -keypass 自定义密码
在这里插入图片描述

执行成功后桌面会生成一个 自定义.keystore 文件,将这个文件复制到
项目的android/app/目录下,如下图所示:我的文件叫shunyue.keystore
在这里插入图片描述

2.创建一个名为key.properties

接下来项目的android/目录下创建一个名为key.properties的文件:
文件内容如下:后面的值根据创建的 keystore填写,这是我填写的样本

storePassword=shunyue123
keyPassword=shunyue123
keyAlias=shunyue
storeFile=shunyue.keystore

3.编辑/android/app/build.gradle文件配置签名

1.替换:

android {

为:

def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {

2.替换:

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
    }
}

替换后文件内容如下:

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}

apply plugin: 'com.android.application'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
    compileSdkVersion 28

    lintOptions {
        disable 'InvalidPackage'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.example.flutter_app1"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

flutter {
    source '../..'
}

dependencies {
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

4. 替换android/app/src/main/res文件夹内各尺寸打包图片logo

如果没必要设置logo,这一步可以忽略!
如图所示:(图片名必须是原图片名)
在这里插入图片描述

5. 配置联网权限等一系列你需要的权限

这一步很关键,因为如果你的程序需要发起网络请求,不配置就没有网络权限
我们需配置两个文件夹
1. android/src/main/AndroidManifest.xml配置如下:
在</manifest>上一行配置

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

如图所示:
在这里插入图片描述
2. android/src/profile/AndroidManifest.xml配置如下:
在</manifest>上一行配置

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

如同所示:
在这里插入图片描述

6. cmd项目目录运行:flutter build apk

在这里插入图片描述

成功成功!亲测成功啦!

接下来手机安装运行吧!!!
在这里插入图片描述

最后温馨提示一下:

在这里插入图片描述

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值