as

Settings
Sign out
Notifications
Alexa
Amazon Appstore
AWS
Documentation
Support
Contact Us
My Cases

as

Develop
Test
Publish
Monetize
Engage users
Device specifications
Resources

Port Existing Android App to Fire OS

Depending on your app's code, you might need to make some updates to your code base for your Android app to successfully run on Fire OS devices. This page discusses the requirements that your app must meet and porting recommendations for submitting a Fire OS app to the Amazon Appstore.

Overview of the porting process

To make an existing Android app compatible with Fire OS and port it to the Amazon Appstore, use the following process.

  1. Determine if your app uses any APIs, services, and features that are unsupported by Fire OS and migrate to a supported equivalent.
  2. Update your minimum API level as required for the Fire OS devices that you plan to support.
  3. Remove any unsupported features from your app.
  4. Recompile and test your app.
  5. Submit your app to the Amazon Appstore.

For more details on these steps, review the following sections.

Step 1. Determine if APIs, services, and features are unsupported

If you have an existing Android app on Google Play, it might use Google Play services, which isn't supported on Fire OS. If your app uses any APIs, services, or features that aren't supported by Fire OS, update your code to use the equivalent Amazon-supported services and features. To help you with this process, the following section has Amazon-supported solutions for APIs, services, and features that your app might use.

Solutions to use when porting from Google Play

If your Android app requires Google Play services or a feature available on Android phones, use the following table to find an alternative API, service, or feature that works with Fire OS.

API, service, or feature Action
Google Play In-App Billing Use the Appstore Billing Compatibility SDK
Firebase Cloud Messaging Use the A3L Messaging SDK
Google Sign-In Use the A3L Authentication SDK
Google Location Services Use the A3L Location SDK
Google Drive Use the A3L Authentication SDK and Integrate with Google APIs
Any phone feature Code your app to degrade gracefully
Device orientation See Device Orientation
Intents See Supported Android Intents
Screen sizes and layouts See Screen Layout and Resolution

Items listed in bold are SDKs offered by the Amazon Appstore built for porting your existing Android app.

Firebase and alternatives

If you use Firebase libraries in your app, first determine whether the library is supported on Amazon Fire devices. Some Firebase libraries are compatible with Fire devices and you can continue to use them when porting your app. In cases where Firebase libraries aren't compatible, you can use an alternative solution, or disable the library on Fire devices.

Follow these steps to determine if a Firebase library works on Fire devices.

  1. Determine if the library requires Google Play services. To do this, visit the Firebase documentation and review the "Google Play services not required" table. If the library doesn't require Google Play Services, you can continue to use it on Fire devices.

  2. Determine if the library is listed in the Google Play Service required or recommended section.

    • If the library is listed as recommended, it might be partially compatible.

      Currently, the AdMob and Analytics libraries are listed as recommended. This means while most features should work, some automatic insights are only available on devices with Google Play services.

    • If the library requires Google Play services, use an alternative library or disable the library on Fire devices.

If you've decided to explore using an alternative library, the following table can guide you to a suitable alternative that is compatible with Fire devices.

Compatible alternative libraries
Unsupported Firebase feature Description Compatible alternative
App Check Play Integrity provider Prevents unauthorized clients from accessing an app's API resources. Custom App Check Provider
App Check SafetyNet provider Protects an app against security threats. This library is deprecated. Custom App Check Provider
App Indexing Indexes content to display in the Google Search App. This library is no longer recommended. Android App Links or App Search depending on your requirements.
Cloud Messaging Sends notification messages to a client app. A3L Messaging
Dynamic Links Determines where a link opens based on the environment where the user clicked the link. Branch
Firebase Machine Learning (ML) On-device machine learning for mobile apps. AWS Machine Learning—use a solution that works for your needs.
Firebase ML Custom Model Creates a custom ML model AWS Machine Learning—use a solution that works for your needs.

Step 2. Update your minimum API level

Amazon recommends setting a minimum API level of 10 to ensure compatibility with all Fire tablets. For information about the Android OS versions for the Fire tablets, see Fire Tablet Device Specifications.

If your app uses methods introduced in:

  • API levels 11 through 15 - You must modify your implementation such that you do not call those methods on Kindle Fire (1st Gen).
  • API level 16 or 17 - You must modify your implementation such that you do not call those methods on Kindle Fire (1st Gen) and Kindle Fire (2nd Gen) tablets.
  • API level 18 or later - You must modify your implementation such that you do not call those methods on Kindle Fire (3rd Gen).

For more information, see Check System Version at Runtime in the Android training guide Supporting Different Platform Versions.

For information about specifying API levels in your app, see Specify Minimum and Target API Levels in the Android training guide.

Step 3. Remove unsupported features

Before submitting your app to the Amazon Appstore, make sure to remove any unsupported features. The following features are unsupported by the Amazon Appstore:

  • Themes
  • Wallpapers
  • Screen savers
  • Custom or third-party onscreen keyboards (use the default onscreen keyboard instead)
  • Home screen widgets that manipulate the user interface
  • disable_keyguard permissions
  • Lock screen customizations

Step 4. Recompile and test your app

When you've updated your app's code, you can recompile and test your app. Make sure to test your app thoroughly before submitting it to the Amazon Appstore. To review test criteria and recommended test cases, see Test Criteria for Amazon Appstore Apps.

Step 5. Submit your app

After you have tested your app and verified it complies with Appstore guidelines, you can submit your app to the Amazon Appstore. For detailed instructions, see Submit Your App to the Amazon Appstore.

SDKs and libraries compatible with Fire OS

For a list of Android SDKs that are compatible with Fire OS, see Compatible Android SDKs.

For a list of Firebase libraries that don't require Google Play services and can be used on Fire OS, see Dependencies of Firebase Android SDKs on Google Play services in the Android developer documentation.


Last updated: Dec 11, 2025

").insertBefore(this); } }); }); $(document).ready(function() { if ($("#jumpoffset").length) { var scrollhash = document.getElementById('jumpoffset'); scrollhash.scrollIntoView(true); if (location.hash) { location.href = location.hash; } else { var scrollbody = document.querySelector('.mainColumn'); scrollbody.scrollIntoView(true); window.scroll(0, -500); } } }); $(document).ready(function() { if ($("#jump").length) { var scrollold = document.getElementById('jump'); scrollold.scrollIntoView(true); window.scroll(0, -100); if (location.hash) { location.href = location.hash; } } }); //resize container on local builds $(document).ready(function() { if (window.location.href.indexOf("/127.0.0.1:4000/") > -1) { document.querySelector('.container-fluid').style.position = 'fixed'; } }); //add underline to headers $(document).ready(function() { if ($(".productTitle").is(':contains("Alexa Skills Kit")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Skills Kit")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($(".productTitle").is(':contains("Alexa Presentation Language (APL)")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Skills Kit")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($(".productTitle").is(':contains("Alexa Connect Kit")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Connect Kit")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($(".productTitle").is(':contains("A/B Testing")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Skills Kit")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($(".productTitle").is(':contains("Alexa Smart Properties")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Smart Properties")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($(".productTitle").is(':contains("Alexa Conversations Developer Guide")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Skills Kit")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($(".productTitle").is(':contains("Alexa Design Guide")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Design Guide")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Design Guide")')) { $(this).css("padding", "0"); } }); } if ($(".productTitle").is(':contains("Alexa Gadgets Toolkit")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Gadgets Toolkit")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Gadgets Toolkit")')) { $(this).css("padding", "0"); } }); } if ($(".productTitle").is(':contains("Alexa Voice Service")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Voice Service")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($("h1").is(':contains("Alexa Reference Content")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Reference")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($("h1").is(':contains("Alexa Videos")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Videos")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($("h1").is(':contains("Alexa Code Samples")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Code Samples")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($("h1").is(':contains("Documentation Home")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Home")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } }); $(document).ready(function () { const myScrollspy = $("#myScrollspy"); if (myScrollspy.length) { const containsList2orList3 = myScrollspy.find(".list2, .list3").length > 0; if (containsList2orList3) { myScrollspy.css("display", "block"); $(".fa.fa-info-circle").show(); } else { myScrollspy.css("display", "none"); $(".fa.fa-info-circle").hide(); } } }); /** * This function moves the 'page-not-translated' section from its original position * to a new position after the 'atd-categories-header' and ensures it is displayed * only in the new location. This is achieved by hiding the section initially, * moving it, and then displaying it again once it is in the correct position. */ $(document).ready(function() { const $pageNotTranslatedMessage = $('#page-not-translated'); const $desktopCategoriesHeader = $('.navigation-header.atd-categories-header'); const $mobileToggleHeader = $('.mobile-toggle'); if ($pageNotTranslatedMessage.length) { if ($mobileToggleHeader.length) { $pageNotTranslatedMessage.insertAfter($mobileToggleHeader); } else if ($desktopCategoriesHeader.length) { $pageNotTranslatedMessage.insertAfter($desktopCategoriesHeader); } $pageNotTranslatedMessage.show(); } }); // Function to handle smooth scrolling to target elements when links are clicked $(document).ready(function () { $('.customspy a, .mainColumn a').on('click', function (event) { const targetId = $(this).attr('href'); if (targetId && targetId.startsWith('#')) { event.preventDefault(); const targetElement = document.querySelector(`[id="${targetId.replace('#', '')}"]`); if (targetElement) { const hash = targetId.substring(1); window.history.pushState(null, '', `#${hash}`); targetElement.scrollIntoView(true); window.scroll(0, -500); } } }); }); window.addEventListener('DOMContentLoaded', function () { const targetId = window.location.hash; if (targetId) { const targetElement = document.querySelector(targetId); if (targetElement) { setTimeout(() => { targetElement.scrollIntoView(true); window.scrollBy(0, -500); }, 10); } } }); function activateContentBasedOnHash() { const currentHash = window.location.hash.substring(1); if (currentHash) { const contentElement = document.getElementById(currentHash); if (contentElement) { activateTabAndContent(contentElement); } } } function activateTabAndContent(contentElement) { const tabSection = contentElement.closest('.tab-pane'); if (tabSection) { const parentTabLink = document.querySelector(`a[href='#${tabSection.id}']`); if (parentTabLink) { const parentNavTabs = parentTabLink.closest('.nav-tabs'); if (parentNavTabs) { parentNavTabs.querySelectorAll('.nav-link').forEach(link => { link.classList.remove('active', 'show'); }); parentTabLink.classList.add('active', 'show'); } const parentTabContent = tabSection.closest('.tab-content'); if (parentTabContent) { parentTabContent.querySelectorAll('.tab-pane').forEach(tab => { tab.classList.remove('active', 'show'); }); tabSection.classList.add('active', 'show'); } } } } function scrollToHashWithOffset() { const tabHash = window.location.hash; const targetTabLink = document.querySelector(`.nav-tabs a[href="${tabHash}"]`); const mainContentColumn = document.querySelector('.inline'); if (targetTabLink && mainContentColumn) { const totalHeaderHeight = getTotalHeaderHeight() + 40; targetTabLink.scrollIntoView({behavior: 'smooth', block: 'start'}); setTimeout(() => { mainContentColumn.scrollBy(0, -totalHeaderHeight); }, 20); } } function getTotalHeaderHeight() { return [...document.querySelectorAll('.atd-services-header, .atd-categories-header')] .reduce((total, header) => total + (header ? header.offsetHeight : 0), 0); } function handleClick(event) { event.preventDefault(); const link = event.currentTarget; const hash = link.getAttribute('href').substring(1); const contentElement = document.getElementById(hash); if (contentElement) { activateTabAndContent(contentElement); scrollToHashWithOffset(); } } function handleBackToTopClick(event) { event.preventDefault(); const mainContentColumn = document.querySelector('.inline'); if (mainContentColumn) { mainContentColumn.scrollTo({top: 0, behavior: 'smooth'}); } window.scrollTo({top: 0, behavior: 'smooth'}); } document.addEventListener('DOMContentLoaded', () => { activateContentBasedOnHash(); scrollToHashWithOffset(); const myScrollspy = document.getElementById('myScrollspy'); if (myScrollspy) { myScrollspy.querySelectorAll('a[href^="#"]').forEach(link => { link.addEventListener('click', handleClick); }); } document.querySelectorAll('.dpfBackToTopLink, .backToTop').forEach(link => { link.addEventListener('click', handleBackToTopClick); }); }); // Show tab link as selected when clicked $(document).ready(function() { $('.nav-tabs > li > a').on('click', function(e) { e.preventDefault(); $(this).tab('show'); $(this).addClass('active show'); }); }); // Fix for when version dropdown is on the same page as nav tab dropdown // closes other dropdown menu to avoid overlap/usability issues $(document).ready(function() { // Version selector dropdown $('.versionsButton').click(function(e) { // Close the nav tab dropdown if open $('.nav-link.dropdown-toggle').siblings('.dropdown-menu').removeClass('show'); }); // Nav tab selector dropdown $('.nav-link.dropdown-toggle').click(function(e) { // Close the version dropdown if open $('.versionsButton').siblings('.dropdown-menu').removeClass('show'); }); }); // Handle active state management for dropdown menu in nav-tabs // Fixes edge case issues for when version selector dropdown and // nav-tab dropdown appear on the same page $(document).ready(function() { // Function to deactivate all tab panes and reset dropdown items function deactivateAllTabs() { $('.position .nav-item.dropdown .dropdown-menu .dropdown-item').each(function() { const targetId = $(this).attr('href'); $(targetId).removeClass('active show'); $(this).removeClass('active show'); }); } // Store the original pushState function const originalPushState = history.pushState; // Create a custom event for pushState const pushStateEvent = new Event('pushState'); // Override pushState history.pushState = function() { originalPushState.apply(this, arguments); // Dispatch the custom event window.dispatchEvent(pushStateEvent); }; // Add pushState listener window.addEventListener('pushState', function() { const params = new URLSearchParams(window.location.search); const vValue = params.get('v'); // Handle query parameter change from version selector if (vValue) { // Remove active classes from all tabs deactivateAllTabs(); $('.position').each(function() { var firstTabPane = $(this).find('.tab-pane').first(); if (firstTabPane.length > 0) { var tabId = firstTabPane.attr('id'); var dropdownItem = $('.dropdown-menu .dropdown-item[href="#' + tabId + '"]'); // Make first tab in each version active dropdownItem.addClass('active show'); firstTabPane.addClass('active show'); } }); } }); // Handle dropdown item clicks $('.position .nav-item.dropdown .dropdown-menu .dropdown-item').click(function(e) { e.preventDefault(); // Remove active classes from all tabs deactivateAllTabs(); // Add active class to clicked item $(this).addClass('active show'); // Show corresponding tab content const targetId = $(this).attr('href'); $(targetId).addClass('active show'); }); // Handle initial load from URL hash if (window.location.hash) { const tabId = window.location.hash; if ($(tabId).length) { // Deactivate all tabs first deactivateAllTabs(); // Activate the correct tab and content $(`.position .nav-item.dropdown .dropdown-menu .dropdown-item[href="${tabId}"]`).addClass('active show'); $(tabId).addClass('active show'); } } }); // Fix issue when anchor linking into a tab with a dropdown menu $(document).ready(function() { // Handle initial load from URL hash if (window.location.hash) { const tabId = window.location.hash; if ($(tabId).length) { // Deactivate active links in dropdown $('.nav-item.dropdown .dropdown-menu .dropdown-item').each(function() { $(this).removeClass('active show'); }); } } });