设置 APP 名称,图标,系统权限:

在 android/app/src/main/res 路径下找到以 mipmap- 为前缀命名的文件夹,将对应像素密度的图片放入对应的文件夹中,名字要统一,app 图标即导入。

然后在 android/app/src 路径下找到 AndroidManifest.xml 文件,配置APP的名称、引用图标文件和设置系统权限。

//设置 app 名称和图标
android:label="金农易"
android:icon="@mipmap/ic_launcher"

// uses-permission标签用于定义APP的系统权限,如:打开麦克风摄像头、获取联系人电话簿等
<uses-permission android:name="android.permission.INTERNET" />

生成 app 签名:

创建一个密钥库:

keytool -genkey -v -keystore d:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

按要求设置密钥库口令等信息,然后会在D盘生成一个 key.jks 文件,这里可以自己设置 .jks 的文件存储路径。

注意:keytool 可能不在我们的系统路径中。它是 Java JDK 的一部分,在安装 Android Studio 的时候会被一起安装。运行 flutter doctor -v,’Java binary at:’ 之后打印出来的就是它的路径,然后用 keytool 来替换以上路径中的 java

例如:我的 Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java,那么如果创建秘钥库提示找不到路径,则需要输入如下命令来创建签名:

C:\"Program Files"\Android\"Android Studio"\jre\bin\keytool -genkey -v -keystore d:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key 

如果文件路径包含空格,类似 Program Files 这样的,你需要在路径上加入转义符: /"Program Files"/


向 app 中引入密钥库:

在 android 文件下创建一个 key.properties 的文件:

storePassword=<上一步骤自己设置的秘钥库密码>
keyPassword=<上一步骤中自己设置的秘钥密码>
keyAlias=key
storeFile=<密钥库的位置,e.g. d:/key.jks>

在 gradle 中配置签名:

进入android/app/build.gradle文件,在 android { 这一行前面,加入如下代码:

def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

并将如下内容:

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 rootProject.file(keystoreProperties['storeFile'])
        storePassword keystoreProperties['storePassword']
    }
}
buildTypes {
    release {
        signingConfig signingConfigs.release
        ndk {
            //选择要添加的对应 cpu 类型的 .so 库。
            //abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a'
            abiFilters 'armeabi-v7a'
        }
    }
}

在 defaultConfig 里设置 APPID 和 版本号:

defaultConfig {
    applicationId "com.example.myflutter"  //APPID
    minSdkVersion 16  //可运行应用的最低版本的 Android 平台
    targetSdkVersion 27  //指定运行应用的目标 API 级别
    versionCode 1    //内部版本号
    versionName "1.0"  //对外公布的版本号
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

构建 apk:

切换到根目录,运行 flutter build apk,在 build/app/outputs/apk/release 目录下找到生成的apk文件,即打包完成。

运行 flutter install ,即可进行安装。