{"id":36264,"date":"2023-08-09T11:44:36","date_gmt":"2023-08-09T11:44:36","guid":{"rendered":"https:\/\/appsgeyser.com\/blog\/?p=36264"},"modified":"2023-12-15T20:30:20","modified_gmt":"2023-12-15T20:30:20","slug":"how-to-publish-flutter-app-on-play-store","status":"publish","type":"post","link":"https:\/\/appsgeyser.com\/blog\/how-to-publish-flutter-app-on-play-store\/","title":{"rendered":"How to Publish Flutter App on Play Store"},"content":{"rendered":"\n<p>If you have developed a Flutter app and want to publish it on the Play Store, you might be wondering how to do it. Similar to iOS, the process is not that difficult. In this blog post, I will guide you through the steps to publish Flutter app to Play Store, from creating a release bundle to submitting it for review.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Add a Launcher Icon<\/h2>\n\n\n\n<p>Once you&#8217;ve crafted your icon design, the next step is to seamlessly integrate it into your project.<\/p>\n\n\n\n<p>Navigate to the <strong>App Icon Generator<\/strong> tool, drag and drop your icon onto the designated area within the tool.<\/p>\n\n\n\n<p>Opt for the Android platform and initiate the generation process by clicking the <strong>Generate<\/strong> button.<\/p>\n\n\n\n<p>As a result of the generation process, you&#8217;ll receive a zip file encompassing a diverse array of icon sizes that are essential for a polished application release.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image001-1.gif\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image001-1.gif\" alt=\"app icon generator\" class=\"wp-image-36268\" title=\"\"><\/a><\/figure>\n\n\n\n<p>Extract the contents of the received zip file to access the individual folders: <strong>android<\/strong> (housing mipmap subfolders), <strong>playstore<\/strong> icon (which you&#8217;ll employ later during publishing), and <strong>appstore<\/strong> icon.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image002-1.jpg\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image002-1.jpg\" alt=\"app icon\" class=\"wp-image-36267\" title=\"\"><\/a><\/figure>\n\n\n\n<p>Efficiently manage your icons by copying the entire array of folders located within the <strong>android<\/strong> directory. Proceed to replace the corresponding <strong>mipmap<\/strong> folders within the following path: <strong>android &gt; app &gt; src &gt; res<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image003-1.gif\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image003-1.gif\" alt=\"\" class=\"wp-image-36272\" title=\"\"><\/a><\/figure>\n\n\n\n<p>To validate the successful icon integration, execute a test run of your application.<\/p>\n\n\n\n<p>With these steps, you&#8217;ve effectively integrated your launcher icon into your project. Now, it&#8217;s time to give your app a distinct identity by renaming it. Additionally, consider updating the bundle and app IDs to align with your vision.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Rename the App, BundleId, AppId<\/h2>\n\n\n\n<p>To initiate the process, begin by running the required command. In your terminal, enter:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><strong>pub global activate rename<\/strong><\/code><\/pre>\n\n\n\n<p>With the command activated, proceed to rename your app. Execute the subsequent command in your terminal:<\/p>\n\n\n\n<p><strong>pub global run rename &#8211;appname &#8220;YourAppName&#8221;<\/strong><\/p>\n\n\n\n<p>Replace <strong>YourAppName<\/strong> with your desired <a href=\"https:\/\/appsgeyser.com\/blog\/how-to-name-an-app\/\">app name<\/a>. In the terminal, you will see the following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image004-2.jpg\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image004-2-1024x88.jpg\" alt=\"\" class=\"wp-image-36269\" title=\"\"><\/a><\/figure>\n\n\n\n<p>Next, adjust the Bundle ID with the following command:<\/p>\n\n\n\n<p><strong>pub global run rename &#8211;bundleId com.yourdomain.yourappname<\/strong><\/p>\n\n\n\n<p>Customize the Bundle ID by replacing <strong>com.yourdomain.yourappname<\/strong> with your preferred Bundle ID. In the terminal, you will see the following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image007-2.jpg\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image007-2-1024x103.jpg\" alt=\"\" class=\"wp-image-36270\" title=\"\"><\/a><\/figure>\n\n\n\n<p>Make sure both the Bundle ID and App ID are unique. It is important for your app promotion.<\/p>\n\n\n\n<p>Next, validate the changes by running your app and observing whether the modifications are successfully reflected.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Sign the App<\/h2>\n\n\n\n<p>To publish your app on PlayStore, you need to sign your app with a&nbsp;<strong>digital signature<\/strong>.<\/p>\n\n\n\n<p>Create a <strong>key.properties<\/strong> file within the <strong>android<\/strong> folder of your project.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image008-2.jpg\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image008-2.jpg\" alt=\"\" class=\"wp-image-36271\" title=\"\"><\/a><\/figure>\n\n\n\n<p>Insert the following text into the created <strong>key.properties<\/strong> file:<\/p>\n\n\n\n<p>storePassword=eChim2v6qKn3&nbsp;&nbsp;&nbsp;&nbsp; &#8221;&#8217;use your password here and make sure to keep it in secret.&#8221;&#8217;<\/p>\n\n\n\n<p>keyPassword=eChim2v6qKn3<\/p>\n\n\n\n<p>keyAlias=upload<\/p>\n\n\n\n<p>storeFile=&lt;location of the key store file, such as \/Users\/&lt;user name&gt;\/upload-keystore.jks&gt;<\/p>\n\n\n\n<p>Execute the subsequent command in your terminal:<\/p>\n\n\n\n<p><em>For Windows<\/em><\/p>\n\n\n\n<p>keytool -genkey -v -keystore c:\\Users\\nakum\\upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload<\/p>\n\n\n\n<p><em>For Mac \/ Linux<\/em><\/p>\n\n\n\n<p>keytool -genkey -v -keystore ~\/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image009-1.gif\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image009-1.gif\" alt=\"fluter app development\" class=\"wp-image-36274\" title=\"\"><\/a><\/figure>\n\n\n\n<p>Locate the generated key file and navigate to its file location.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image010-2.jpg\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image010-2.jpg\" alt=\"\" class=\"wp-image-36273\" title=\"\"><\/a><\/figure>\n\n\n\n<p>Transfer the <strong>upload-keystore.jsk<\/strong> file to the <strong>android &gt; app<\/strong> directory.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image011-1.png\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image011-1.png\" alt=\"\" class=\"wp-image-36275\" title=\"\"><\/a><\/figure>\n\n\n\n<p>Within the <strong>key.properties<\/strong> file, ensure the <strong>storeFile<\/strong> path is accurately updated:<\/p>\n\n\n\n<p>storePassword=eChim2v6qKn3<\/p>\n\n\n\n<p>keyPassword=eChim2v6qKn3<\/p>\n\n\n\n<p>keyAlias=upload<\/p>\n\n\n\n<p>storeFile=..\/app\/upload-keystore.jks<\/p>\n\n\n\n<p>Go to <strong>[project] &gt; android &gt; app &gt; build.gradle<\/strong> and insert the following text just above <strong>android { &#8230; }<\/strong>:<\/p>\n\n\n\n<p>def keystoreProperties = new Properties()<\/p>\n\n\n\n<p>def keystorePropertiesFile = rootProject.file(&#8216;key.properties&#8217;)<\/p>\n\n\n\n<p>if (keystorePropertiesFile.exists()) {<\/p>\n\n\n\n<p>&nbsp; keystoreProperties.load(new FileInputStream(keystorePropertiesFile))<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image013-1.png\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image013-1-1024x488.png\" alt=\"\" class=\"wp-image-36276\" title=\"\"><\/a><\/figure>\n\n\n\n<p>Proceed to remove the existing <strong>buildType{ &#8230; }<\/strong> content and replace it with the following text:<\/p>\n\n\n\n<p>signingConfigs {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp; release {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; keyAlias keystoreProperties[&#8216;keyAlias&#8217;]\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; keyPassword keystoreProperties[&#8216;keyPassword&#8217;]\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; storeFile keystoreProperties[&#8216;storeFile&#8217;] ? file(keystoreProperties[&#8216;storeFile&#8217;]) : null<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; storePassword keystoreProperties[&#8216;storePassword&#8217;]\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;}<\/p>\n\n\n\n<p>&nbsp;buildTypes {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp; release {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; signingConfig signingConfigs.release<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p>&nbsp;}<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image015-1.png\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image015-1-1024x503.png\" alt=\"\" class=\"wp-image-36277\" title=\"\"><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Deploy Android App Bundle<\/h2>\n\n\n\n<p>Clean previous build by purging any remnants of previous builds. Employ the command below to execute a comprehensive cleaning operation:<\/p>\n\n\n\n<p>flutter clean<\/p>\n\n\n\n<p>Execute the following command to generate an <a href=\"https:\/\/appsgeyser.com\/blog\/what-is-apk-file\/\">APK file<\/a><\/p>\n\n\n\n<p>flutter build apk<\/p>\n\n\n\n<p>or an app bundle<\/p>\n\n\n\n<p>flutter build appbundle<\/p>\n\n\n\n<p>Following the command execution, an Android App Bundle (AAB) will be generated. Locate this AAB at <strong>build &gt; app &gt; output &gt; bundle &gt; app-release.aab \/ app-release.apk.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image016-1.jpg\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image016-1.jpg\" alt=\"\" class=\"wp-image-36278\" title=\"\"><\/a><\/figure>\n\n\n\n<p>With the AAB or APK in hand, you&#8217;re now primed to initiate the publication process via the Developer Console.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Create a Google Play Developer Account<\/h2>\n\n\n\n<p>If you don&#8217;t have one already, create a Google Play Developer account at <a href=\"https:\/\/play.google.com\/apps\/publish\" target=\"_blank\" rel=\"noopener\">https:\/\/play.google.com\/apps\/publish<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Create an App<\/h2>\n\n\n\n<p>Next, click on the&nbsp;<strong>Create App<\/strong>&nbsp;button and add <strong>App Name<\/strong>,&nbsp;<strong>Default Language<\/strong>,&nbsp;<strong>App Type<\/strong>,&nbsp;<strong>Free or Paid<\/strong>&nbsp;and check all the fields.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image017-1.jpg\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image017-1.jpg\" alt=\"\" class=\"wp-image-36279\" title=\"\"><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Add Store Listing<\/h2>\n\n\n\n<p>Begin by accessing the <strong>Store Presence<\/strong> section. Locate and click on the <strong>Main store listing<\/strong>.<\/p>\n\n\n\n<p>Add the <strong>short and full description<\/strong> and upload your <strong>app icon<\/strong>. Find the playstore.png file and drag and drop it into the designated App icon box.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image019-1.jpg\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image019-1-1024x470.jpg\" alt=\"\" class=\"wp-image-36280\" title=\"\"><\/a><\/figure>\n\n\n\n<p>Elevate your app&#8217;s appeal by incorporating <strong>feature graphics<\/strong>. Include at least two screenshots in the phone screenshots section. For those targeting 7- and 10-inch tablets, upload related screenshots within the Tablet section.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image021.jpg\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image021-1024x825.jpg\" alt=\"\" class=\"wp-image-36281\" title=\"\"><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 8: Store Setting<\/h2>\n\n\n\n<p>In the <strong>Store Settings<\/strong>, select your app&nbsp;category&nbsp;and add tags, as well as add your email, phone number, and&nbsp;website&nbsp;URL. Then add countries where you want to show your app, your Privacy policy, app access, and select if your app contains built-in ads.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image023.jpg\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image023-1024x413.jpg\" alt=\"\" class=\"wp-image-36282\" title=\"\"><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image025.jpg\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image025-1024x396.jpg\" alt=\"\" class=\"wp-image-36283\" title=\"\"><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image027.jpg\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image027-1024x424.jpg\" alt=\"\" class=\"wp-image-36284\" title=\"\"><\/a><\/figure>\n\n\n\n<p>In the <strong>Content Rating<\/strong> section, choose the category that best fits your app.<\/p>\n\n\n\n<p>In the <strong>Target audience and content<\/strong> section, specify the age groups you intend to target with your app.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image028.jpg\"><img decoding=\"async\" src=\"https:\/\/appsgeyser.com\/blog\/wp-content\/uploads\/2023\/08\/image028-1024x585.jpg\" alt=\"\" class=\"wp-image-36285\" title=\"\"><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 9: Wait for Review and Publish Your App<\/h2>\n\n\n\n<p>After submitting your release for review, you will have to wait for Google to approve it. This usually takes a few hours or days, depending on the complexity and quality of your app. You can check the status of your review by going to the <strong>Release<\/strong> section of the Google Play Console and selecting your release.<\/p>\n\n\n\n<p>Once Google approves your release, it will be published on the Play Store and available for users to download and install. Congratulations! You have successfully published your Flutter app on the Play Store!<\/p>\n\n\n\n<p>Possible Issues and Errors When Publishing Flutter App in Play Store<\/p>\n\n\n\n<p>Many possible issues and errors can arise during the process.<\/p>\n\n\n\n<p><strong>Signing the app in debug mode instead of release mode.<\/strong> This can cause Google Play to reject the app as it is not secure enough for distribution. To fix this, you need to create a signing config for release mode in your build.gradle file and use it when building the app.<\/p>\n\n\n\n<p><strong>Violating Google Play policies or guidelines.<\/strong> This can cause the app to be rejected or removed from the Play Store due to issues such as privacy, security, content, functionality, or intellectual property. To fix this, you need to review the Google Play policies and guidelines and make sure that your app complies with them.<\/p>\n\n\n\n<p><strong>Minify issues<\/strong>: Minifying your app may also cause some errors related to obfuscation or shrinking, such as missing classes, methods, or fields. To avoid them, enable R8 as the code shrinker for your app, and add <strong>proguard<\/strong> rules to preserve the necessary classes and methods for your app.<\/p>\n\n\n\n<p><strong>Bundle issues<\/strong>: Bundling your app is a new format that allows Google Play to generate and serve optimized APKs for each device configuration. However, bundling your app may also cause some errors related to compatibility or verification, such as unsupported architectures or invalid signatures. To avoid these errors, you need to use the latest version of Flutter and <a href=\"https:\/\/appsgeyser.com\/blog\/android-studio\/\">Android Studio<\/a> and build your app bundle using the <strong>flutter build appbundle <\/strong>command.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>You have learned how to publish your Flutter app on the Play Store. It includes creating an app bundle, generating a signing key, registering your app on Google Play Console, as well as how to upload Flutter app to Google Play and release it to the users. It\u2019s an important milestone in your app development journey and helps reach a wider audience.<\/p>\n\n\n\n<p><strong>Save your time!<\/strong>&nbsp;Request Google Play upload by AppsGeyser professional \u2013&nbsp;<a href=\"https:\/\/buy.stripe.com\/28o00mdEzdm3d0I288\" target=\"_blank\" rel=\"noreferrer noopener\">Publish your App<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you have developed a Flutter app and want to publish it on the Play Store, you might be wondering how to do it. Similar to iOS, the process is not that difficult. In this blog post, I will guide you through the steps to publish Flutter app to Play Store, from creating a release [&hellip;]<\/p>\n","protected":false},"author":742,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-36264","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/appsgeyser.com\/blog\/wp-json\/wp\/v2\/posts\/36264","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/appsgeyser.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/appsgeyser.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/appsgeyser.com\/blog\/wp-json\/wp\/v2\/users\/742"}],"replies":[{"embeddable":true,"href":"https:\/\/appsgeyser.com\/blog\/wp-json\/wp\/v2\/comments?post=36264"}],"version-history":[{"count":0,"href":"https:\/\/appsgeyser.com\/blog\/wp-json\/wp\/v2\/posts\/36264\/revisions"}],"wp:attachment":[{"href":"https:\/\/appsgeyser.com\/blog\/wp-json\/wp\/v2\/media?parent=36264"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/appsgeyser.com\/blog\/wp-json\/wp\/v2\/categories?post=36264"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/appsgeyser.com\/blog\/wp-json\/wp\/v2\/tags?post=36264"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}