Skip to content

Conversation

@reidbaker
Copy link
Contributor

@reidbaker reidbaker commented Nov 11, 2025

Description of what this PR is changing or adding, and why:

Documents how to tell from a built apk if the app uses flutter.
Internal documentation authored by me can be seen by googlers in go/flutter-android-detection

Issues fixed by this PR (if any):
flutter/flutter/issues/170523

PRs or commits this PR depends on (if any):
n/a

Presubmit checklist

  • If you are unwilling, or unable, to sign the CLA, even for a tiny, one-word PR, please file an issue instead of a PR.
  • If this PR is not meant to land until a future stable release, mark it as draft with an explanation.
  • This PR follows the Google Developer Documentation Style Guidelines—for example, it doesn't use i.e. or e.g., and it avoids I and we (first-person pronouns).
  • This PR uses semantic line breaks
    of 80 characters or fewer.

@reidbaker reidbaker requested review from a team and sfshaza2 as code owners November 11, 2025 18:52
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @reidbaker, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces comprehensive documentation within the Android deployment guide, outlining various methods to identify whether an Android application package (APK) is built with Flutter. The added content provides both technical instructions using apkanalyzer to inspect APK contents and manifest, as well as mentions of external non-technical tools, aiming to assist users in recognizing Flutter-based applications.

Highlights

  • Identifying Flutter Apps: New documentation has been added detailing methods to determine if an Android APK is a Flutter application.
  • Technical Methods: Two technical approaches are provided: a recommended method using apkanalyzer to check for libflutter.so, and a secondary method checking for flutterEmbedding in the manifest with important caveats.
  • Non-Technical Options: The documentation also includes non-technical ways to identify Flutter apps, such as using specific tools or websites.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds valuable documentation on how to determine if an Android app is built with Flutter. The methods described are relevant and useful. My review includes several suggestions to improve formatting, clarity, and adherence to the Google Developer Documentation Style Guide. These changes will make the documentation easier to read and follow.

@flutter-website-bot
Copy link
Collaborator

flutter-website-bot commented Nov 11, 2025

Visit the preview URL for this PR (updated for commit f77ca31):

https://flutter-docs-prod--pr12668-i-170523-document-android-d-91rzmxbn.web.app

@reidbaker reidbaker requested a review from antfitch November 11, 2025 19:03
@flutter flutter deleted a comment from gemini-code-assist bot Nov 11, 2025
Copy link
Contributor

@sfshaza2 sfshaza2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this case, I wish I could turn off the bot, as it isn't adding a lot of clarity.

Comment on lines 649 to 653
Why this works:
Flutter depends on c++ code that we call the flutter engine. That code in android is bundled as an “.so” native library.
For the life of flutter that file has been named libflutter.so with the flutter framework and developers dart code being
combined into libapp.so. Flutter code names this library flutter and java/android tooling renames it with the lib prefix
and handles library location across architectures. This is what many reverse engineers use to identify flutter apps.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Why this works:
Flutter depends on c++ code that we call the flutter engine. That code in android is bundled as an “.so” native library.
For the life of flutter that file has been named libflutter.so with the flutter framework and developers dart code being
combined into libapp.so. Flutter code names this library flutter and java/android tooling renames it with the lib prefix
and handles library location across architectures. This is what many reverse engineers use to identify flutter apps.
**Why this works**
Flutter depends on C++ code used by the Flutter engine. In Android,
this code is bundled with the Flutter framework and the developer's
Dart code as a native library called `libflutter.so`.
The Java/Android tooling renames the `flutter` library with the `lib` prefix
and handles library location across architectures.
This is how some reverse engineer an APK to identify it as a Flutter app.

Co-authored-by: Shams Zakhour <44418985+sfshaza2@users.noreply.github.com>
@reidbaker
Copy link
Contributor Author

In this case, I wish I could turn off the bot, as it isn't adding a lot of clarity.

I thought it was pretty helpful. I adopted most of its suggestions

@reidbaker reidbaker requested a review from sfshaza2 November 12, 2025 15:06
@sfshaza2
Copy link
Contributor

sfshaza2 commented Nov 12, 2025

I'm glad to hear that, Reid. I often find it helpful but, in this case, it needed further work, but it won't let me make changes on top of its changes and that frustrates me. (Since its changes are sometimes just wrong or just don't go far enough, etc.)

Copy link
Contributor

@sfshaza2 sfshaza2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@sfshaza2 sfshaza2 merged commit 7f7690e into flutter:main Nov 13, 2025
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants