美文网首页Flutter圈子Flutter中文社区hybird
flutter笔记5:官方资料搬运-安卓客户端打包

flutter笔记5:官方资料搬运-安卓客户端打包

作者: 燃烧的鱼丸 | 来源:发表于2018-03-06 00:42 被阅读1046次

    上一篇,使用material原生控件完成了人生的一个用flutter开发的APP,这两天为了理解flutter,翻了很多资料,信息量太大,烧了不少脑子,今天这篇就简单点,实战走一下安卓客户端的打包流程,看看会遇到什么问题。想查看官方资料的请移步Preparing an Android App for Release

    第一步

    首先,你需要找到这几个路径下的文件,并配置其中的几个参数:

    配置APP图标

    • 项目目录/android/app/src/main/res/
      进入这个路径后,会看到很多个以mipmap-为前缀命名的文件夹,文件夹名称的后缀是对应的APP图标像素密度:

    mdpi(中)~160dpi
    hdpi(高)~240dpi
    xhdpi(超高)~320dpi
    xxhdpi(超超高)~480dpi
    xxxhdpi(超超超高)~640dpi

    将对应像素密度的图片放入对应的文件夹中,图片记得用png格式,安装的APP会根据对应的屏幕像素密度使用适应尺寸的图标,但要注意,APP图标文件最好统一使用同一个名字,方便后面配置。

    配置APP名称、图标和系统权限

    • 项目目录/android/app/src/main/AndroidManifest.xml

    application标签内部:

    android:label="myflutter"   //此属性为你的APP安装到手机上显示的名称,支持中文,所以取名的时候请浪一点~
    android:icon="@mipmap/ic_test"  //此属性为APP图标用到的图片文件名称
    //这里图片文件不需要输入文件格式后缀,前面说过的要使用相同文件名,因为这里并没有按像素密度分别配置对应的图片文件
    

    uses-permission标签,此标签定义APP的系统权限,比如打开麦克风摄像头啦、获取联系人号码簿啦、是否允许上网等等等,权限有很多,具体请参考翻墙官网。在这里,默认配置了一个android:name="android.permission.INTERNET"的权限,意思是允许手机联网,因为flutter和APP交换数据需要用到这个权限。

    第二步

    APP注册

    生成keystore

    官方写的很简单,终端下输入命令即可获取:

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

    然而实际上的效果是:


    找不到keytool

    然后官方note了一下,说可能会因为找不到keytool而报错,叫我们输入flutter doctor命令,从结果的Java binary at:中找到keytool.exe文件路径再执行上面的命令,然而我使用了N次flutter doctor也没找到Java binary at:

    找不到Java binary at:

    正确的打开方式是输入下面这个命令:

    flutter doctor -v

    然后你看到的结果是:


    找到Java binary at:

    啊喂~那个官方文档是不是忘了更新啦。

    然后我们复制上图中的路径,输入这个命令:

    E:\Applications\AndroidStudio\jre\bin\keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

    注意,把路径中最后的java替换成keytool

    这时候会弹出一堆问询,小伙伴们按要求填写即可:


    生成KEY失败

    但是按要求操作的小伙伴并不能如愿以偿得到结果,由于当前的目录下没有写的权限,所以要找一个有写入权限的路径放置生成的KEY,于是上面的命令变成了:

    E:\Applications\AndroidStudio\jre\bin\keytool -genkey -v -keystore /E:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

    注意看~/key.jks改成了/E:/key.jks,于是乎:

    成功生成KEY

    然后到E盘根目录下可以发现多了一个key.jks文件,记住:不要把这个jks文件共享给任何人!!不要把这个jks文件共享给任何人!!不要把这个jks文件共享给任何人!!尤其是只图方便把源码一股脑签入github的XX,如果是为公司做的APP,后果自己想~。

    这时候到项目目录的android文件夹下创建一个名为key.properties的文件,并打开贴入以下代码:

    storePassword=<password from previous step>    //输入上一步创建KEY时输入的 密钥库 密码
    keyPassword=<password from previous step>    //输入上一步创建KEY时输入的 密钥 密码
    keyAlias=key
    storeFile=<E:/key.jks>    //key.jks的存放路径
    

    这个key.properties文件也不要共享出去!!

    配置key注册

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

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

    把如下代码:

    buildTypes {
        release {
            signingConfig signingConfigs.debug
        }
    }
    

    替换成:

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

    defaultConfig中,录入APPID和版本号,版本号命名控制参考翻墙吧你少年

    defaultConfig {
            applicationId "com.example.myflutter"  //APPID
            minSdkVersion 16  //可运行应用的最低版本的 Android 平台,由该平台的 API 级别标识符指定
            targetSdkVersion 27  //指定运行应用的目标 API 级别。在某些情况下,这允许应用使用在目标 API 级别中定义的清单元素或行为,而不是仅限于使用那些针对最低 API 级别定义的元素或行为。
            versionCode 1    //内部版本号
            versionName "1.0"  //对外公布的版本号
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
    

    第三步

    编译生成apk文件

    到终端中输入如下命令:

    flutter build apk

    耐心等待执行完毕后你会看到:


    生成apk

    然后到图中标识的路径下,找到生成apk文件,即打包完成了,你也可以在终端输入命令安装APP:

    flutter install

    安装时,会把原来调试运行安装的APP卸载掉,重新安装新的APP:


    安装APP

    然后看手机上:


    APP安装完毕

    O了,今天的搬运到此完毕,走过一遍流程下来发现官网文档可能没及时更新,导致我踩了几个坑,不过总体来说还比较简单,大家可以自己搞搞试试,就到这里,补瞌睡去~
    flutter 中文社区(官方QQ群:338252156)

    相关文章

      网友评论

      • 若邪:flutter install 命令不能直接安装在模拟器上嘛?
        AWeiLoveAndroid:模拟器也是没问题的。
        若邪:@燃烧的鱼丸 我的意思是用命令打包好了,但是执行flutter install这个命令时,就报错,装不上,没有连接真机,开的模拟器
        燃烧的鱼丸:IDE上安装了flutter插件就可以,安装到模拟器上是什么鬼?
      • 793fa82bd97d:楼主 我打包的时候出现问题了 查了资料并没有解决 能帮忙看一下吗?
        FormatException: FormatException: Bad UTF-8 encoding 0xa8 (at offset 181)

        ```
        #0 _Utf8Decoder.convert (dart:convert/utf.dart:574)
        #1 _Utf8ConversionSink.addSlice (dart:convert/string_conversion.dart:345)
        #2 _Utf8ConversionSink.add (dart:convert/string_conversion.dart:341)
        #3 _ConverterStreamEventSink.add (dart:convert/chunked_conversion.dart:86)
        #4 _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:120)
        #5 _rootRunUnary (dart:async/zone.dart:1134)
        #6 _CustomZone.runUnary (dart:async/zone.dart:1031)
        #7 _CustomZone.runUnaryGuarded (dart:async/zone.dart:933)
        #8 _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:336)
        #9 _BufferingStreamSubscription._add (dart:async/stream_impl.dart:263)
        #10 _StreamController&&_SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:763)
        #11 _StreamController._add (dart:async/stream_controller.dart:639)
        #12 _StreamController.add (dart:async/stream_controller.dart:585)
        793fa82bd97d:@燃烧的鱼丸 好的 知道了 我这边换了SDK编译之后就好了
        燃烧的鱼丸:@森海_e4fd 字符编码问题,貌似专题里有人弄过,我没遇到过呢
      • longzekai:怎么感觉撸主不是 搞Android 开发的??
        longzekai:@燃烧的鱼丸 我认为我猜中了。:joy:
        燃烧的鱼丸:@longzekai 哈哈,你猜
      • m提及:配置后之后不能build,o(╥﹏╥)o
        提示: Oops; flutter has exited unexpectedly.
        将 配置key注册-替换成 跳过就可以了,不知道有什么问题
        :flushed: :flushed: :flushed:
        m提及:好吧,key.properties 文件不能写注释。
        :mask: :mask: :mask:
        m提及:@燃烧的鱼丸 又出现一个新问题,(´・_・`),就是使用 flutter build apk 打包出来的程序是旧的程序,不是当前正在调试的程序。
        燃烧的鱼丸:自己学着弄的APP无所谓了,如果要发布到应用商城,必须要有KEY的
      • 碧海鱼龙::flushed: 这坑也太多了!
      • GitHub_itgoyo:app name 好评

      本文标题:flutter笔记5:官方资料搬运-安卓客户端打包

      本文链接:https://www.haomeiwen.com/subject/lmlkfftx.html