草庐IT

Flutter项目打包生成APK

文阿花 2023-12-19 原文

flutter实现安卓打包:(以安卓Studio工具为例)

(1)创建key.jks文件

在安卓studio中调整至项目路径,例如:
我的项目所在地

E:\Flutter\fluttershuqi>

然后输入命令:

keytool -genkey -v -keystore E:\Flutter\fluttershuqi\key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

最后的alias key , key指的是签名文件的别名。
其中E:\Flutter\fluttershuqi是我希望.jks文件创建的位置,

E:\Flutter\textdemo>keytool -genkey -v -keystore E:\Flutter\fluttershuqi\key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
  [Unknown]:  1
您的组织单位名称是什么?
  [Unknown]:  2
您的组织名称是什么?
  [Unknown]:  3
您所在的城市或区域名称是什么?
  [Unknown]:  4
您所在的省//自治区名称是什么?
  [Unknown]:  5
该单位的双字母国家/地区代码是什么?
  [Unknown]:  6
CN=1, OU=2, O=3, L=4, ST=5, C=6是否正确?
  []:  Y

正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 10,000):
         CN=1, OU=2, O=3, L=4, ST=5, C=6
输入 <key> 的密钥口令
        (如果和密钥库口令相同, 按回车):
[正在存储E:\Flutter\fluttershuqi\key.jks]

Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore E:\Flutter\fluttershuqi\key.jks -destkeystore E:\Flutter\fluttershuqi\key.jks -deststoretype pkcs1
2" 迁移到行业标准格式 PKCS12。

此时你的key.jks文件就创建成功了,

如果此过程报错,请参考如何打包发布flutter项目

(2) 将创建的jks文件粘贴至Flutter项目的指定位置

  • (1)方案一:直接放在android/app文件夹下,这样的话第3步中的storeFile写法为:
    storeFile=key.jks或者storeFile=E:/Flutter/fluttershuqi/android/app/key.jks

  • (2)也可以在app目录下再创建一个文件夹,例如文件夹key
    storeFile=key/key.jks或者storeFile=E:/Flutter/fluttershuqi/android/app/key/key.jks

方法(一):

(3) 在项目目录下的android文件夹下,创建一个名为key.properties的文件,并打开粘贴下面的代码:

错误写法:

storePassword=123456   //输入上一步创建KEY时输入的 密钥库 密码
keyPassword=123456    //输入上一步创建KEY时输入的 密钥 密码
keyAlias=key
storeFile=E:/Flutter/fluttershuqi/android/app/key.jks    //key.jks的存放路径  此处要是用/而不是\

此处是我自己遇到的问题,中间一直找不到问题,最后才发现这个文件注释不是//而是#,我开始错误使用了//导致一直报如下错,这是将后面的空格和//的内容都识别到key路径中了,所以才会找不到。

* What went wrong:
Execution failed for task ':app:validateSigningRelease'.
> Keystore file 'E:\Flutter\fluttershuqi\android\app\key.jks   \key.jks????��??��??' not found for signing config 'release
'.

正确写法:

storePassword=123456
keyPassword=123456
keyAlias=key
storeFile=E:/Flutter/fluttershuqi/android/app/key.jks

注意:后面连空格都不要有,不然也会报错

(4) 配置/android/app/build.gradle文件

  • 进入项目目录的/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
    }
}

为:

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

方法(二):

(3)配置build.gradle文件

  • 修改
buildTypes {
    release {
        signingConfig signingConfigs.debug
    }
}

为:

signingConfigs {

        release {
                keyAlias 'key'
                keyPassword '123456'
                storeFile file('key.jks')//此种写法默认key文件在android-app文件夹下
                storePassword '123456'
//            keyAlias keystoreProperties['keyAlias']
//            keyPassword keystoreProperties['keyPassword']
//            storeFile file(keystoreProperties['storeFile'])
//            storePassword keystoreProperties['storePassword']
        }
        debug {
            keyAlias 'key'
            keyPassword '123456'
            storeFile file('key.jks')
            storePassword '123456'
//            keyAlias keystoreProperties['keyAlias']
//            keyPassword keystoreProperties['keyPassword']
//            storeFile file(keystoreProperties['storeFile'])
//            storePassword keystoreProperties['storePassword']
        }
    }
  buildTypes {
        release {
            signingConfig signingConfigs.release
        }
        debug {
            signingConfig signingConfigs.release
        }
    }

(4)打包 生成apk

输入命令:flutter build apk
即生成安装包,安装包位置:E:\Flutter\myflutter\build\host\outputs\apk\release,即在项目build文件夹下。

(5)关于备注内容

  • 修改应用名称和logo:

有关Flutter项目打包生成APK的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  4. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  5. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  6. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  7. ruby-on-rails - Ruby on Rails - 为文本区域和图片生成列 - 2

    我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数

  8. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  9. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  10. ruby-on-rails - 如何在 Rails 3 中创建自定义脚手架生成器? - 2

    有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我

随机推荐