web-dev-qa-db-fra.com

Appel de bibliothèques natives dans Flutter à l'aide de canaux de plate-forme

En utilisant canaux de plate-forme , Flutter peut interagir avec la plate-forme native (c'est-à-dire lire le niveau de la batterie). Sur Android, cela nécessiterait d'appeler une méthode Java.

Je souhaite utiliser un tiers Java SDK (pour AWS Cognito). Puis-je mettre cette bibliothèque quelque part dans mon /Android, et interagir avec lui? Si oui, comment puis-je faire cela?

7
haz

Si vous n'avez pas encore démarré un projet de plugin, créez-en un.

Rassemblez les pots tiers quelque part - ne les placez pas dans le dossier pluginproject/Android/....

Ouvrez le projet de plugin dans votre IDE - dans mon cas IDEA - et ajoutez les fichiers tiers au chemin de classe Java . (Dans IDEA, cliquez sur Project Structure/Modules/select pluginName _ Onglet Android/Dependencies/green PlusSign/jars or répertoires - et sélectionnez les jars individuels ou le dossier entier. t vérifier l'exportation.)

Implémentez votre code spécifique à Android dans Java (ou Kotlin) dans pluginproject/Android/src/main/Java/com/yourcompany. ../.../PluginnamePlugin.Java, où vous pourrez désormais utiliser les classes déclarées par les pots tiers.

Ajoutez les dépendances à gradle pour qu'il compile. Dans pluginproject/Android/build.gradle (NOTE - il y a plusieurs build.gradles) ajoutez ceci à la fin - après la section Android {}

dependencies {
    implementation files('../../../Java/someapi/somejar.jar')
}

Le chemin doit être relatif au dossier pluginproject/Android. Vous pouvez spécifier un dossier entier avec cette syntaxe à la place

implementation fileTree(dir: '../../../somewhere/somefolder', include: ['*.jar'])

Exécutez l'exemple d'application fourni dans le projet de plug-in.

Je ne sais pas pourquoi il n'est pas possible de mettre les pots tiers, disons, pluginproject/Android/lib, mais cela provoque une erreur dex pour moi, alors que les laisser en dehors du - pluginproject/dossier fonctionne.

Je n'ai jamais utilisé que des pots tiers bien comportés (pas de JNI, ne créez pas leurs propres threads, etc.).

5
Richard Heap

Oui, vous le pouvez.

Vous pouvez voir la documentation à ce sujet ou si vous le souhaitez, vous pouvez voir tutoriel . Il est utile si vous utilisez un SDK qui vous donne un code natif pour les deux Android et iOS, sinon ce sera difficile. Bonne chance!

3
goops17

Le côté Android de flutter utilise Gradle (le même que tout autre Android). Si vous avez un Android Android) application, vous pouvez probablement transférer la plupart des mêmes paramètres à partir de vos fichiers Gradle.

À moins que vous n'ayez déjà fait cela et que vous ayez un système de gestion des fichiers jar, je ne recommanderais pas de copier les fichiers jar directement dans votre projet et donc le contrôle de source .

Utilisez plutôt la résolution de dépendance intégrée de gradle. Vous devriez pouvoir suivre Amazon Android . La différence est que vous devrez raccorder les appels au SDK via les canaux de méthode et écrivez votre propre code d'interopérabilité.

1
rmtmckenzie