-
Notifications
You must be signed in to change notification settings - Fork 7.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[pedometer] Fix file/folder links and cleanup instructions (#1988)
- Fixes links to specific files/folders - Adds more file links where relevant - Uses more specific link text than "here" - Add links to relevant apps when mentioned - Slightly expands on some instructions - Cleans up formatting Fixes #1978
- Loading branch information
Showing
2 changed files
with
64 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,54 +1,93 @@ | ||
# FFIgen + JNIgen pedometer | ||
|
||
This is a demo for some of our tooling around calling platform APIs directly from dart code. This repository represents a demo of a plugin that leverages FFIgen & JNIgen. There is also an example pedometer app that uses the bindings generated from these tools. | ||
This is a demo for some of our tooling around | ||
calling platform APIs directly from dart code. | ||
This repository represents a demo of a plugin that leverages FFIgen & JNIgen. | ||
There is also an example pedometer app that | ||
uses the bindings generated from these tools. | ||
|
||
- [FFIgen](https://pub.dev/packages/ffigen) is used to generate bindings for C, Objective-C and Swift APIs | ||
- [JNIgen](https://pub.dev/packages/jnigen) is used to generate bindings for Java and Kotlin APIs | ||
|
||
**These tools are both experimental and are currently a work in progress.** If you find any issues or have feedback, please file it on the corresponding Github repositories. | ||
- [FFIgen](https://pub.dev/packages/ffigen) is used to generate | ||
bindings for C, Objective-C and Swift APIs. | ||
- [JNIgen](https://pub.dev/packages/jnigen) is used to generate | ||
bindings for Java and Kotlin APIs. | ||
|
||
**These tools are both experimental and are currently a work in progress.** | ||
If you find any issues or have feedback, | ||
please file it on the corresponding GitHub repositories. | ||
|
||
## Re-generating bindings | ||
The bindings that allow the dart code to call the platform code have already been generated [here](/lib). You can regenerate them by following the steps below. | ||
|
||
The bindings that allow the Dart code to call the platform code have | ||
already been generated in the [`\lib` folder](./lib). | ||
You can regenerate them by following the steps below: | ||
|
||
### FFIgen | ||
Configuration for FFIgen is [here](/ffigen.yaml) for the [CoreMotion](https://developer.apple.com/documentation/coremotion) framework. FFIgen currently does not support autogenerating the code to handle callbacks. So, there were a few steps needed to appropriately handle callbacks in Objective-C. You can [read more here](https://dart.dev/guides/libraries/objective-c-interop#callbacks-and-multithreading-limitations). | ||
|
||
`dart run ffigen --config ffigen.yaml` | ||
Configuration of FFIgen for the | ||
[CoreMotion framework](https://developer.apple.com/documentation/coremotion) | ||
is in the [`ffigen.yaml` file](./ffigen.yaml). | ||
FFIgen currently does not support autogenerating code to handle callbacks. | ||
So, there are a few extra steps needed to | ||
appropriately handle callbacks in Objective-C. | ||
You can read more about this limitation on | ||
[dart.dev]((https://dart.dev/guides/libraries/objective-c-interop#callbacks-and-multithreading-limitations). | ||
|
||
```bash | ||
dart run ffigen --config ffigen.yaml | ||
``` | ||
|
||
|
||
### JNIgen | ||
Configuration for JNIgen is [here](/jnigen.yaml) for the [HealthConnect API](https://developer.android.com/guide/health-and-fitness/health-connect). | ||
|
||
1. `cd Example && flutter build apk` | ||
2. `cd .. && dart run jnigen --config jnigen.yaml` | ||
Configuration of JNIgen for the | ||
[HealthConnect API](https://developer.android.com/guide/health-and-fitness/health-connect) | ||
is in the [`jnigen.yaml` file](./jnigen.yaml). | ||
|
||
1. Build an Android APK file from the example app. | ||
Currently, JNIgen requires at least one APK build | ||
to obtain the classpaths of Android Gradle libraries. | ||
|
||
```bash | ||
cd example && flutter build apk | ||
``` | ||
|
||
2. Return to the `/pedometer` directory and run `jnigen`: | ||
|
||
```bash | ||
cd .. && dart run jnigen --config jnigen.yaml | ||
``` | ||
|
||
## Running the example app | ||
The example app is located in the `experimental/pedometer/example` directory, | ||
and the commands below assume they are being run from that location. | ||
|
||
The example app is located in the [`/example`](./example) directory, | ||
and the following commands assume they are being run from that location. | ||
|
||
Note that step counting is only available on physical devices. | ||
|
||
### iOS | ||
- `flutter run` | ||
- Allow *pedometer* app access to step counting | ||
|
||
- Run `flutter run` and choose your physical device. | ||
- Allow the *pedometer* app access to step counting. | ||
|
||
### Android | ||
- Make sure that Google Fit is installed (to ensure that steps are being counted) | ||
- `flutter run` | ||
- Install Health Connect and grant access to Google Fit and the *jni_demo* app | ||
|
||
- Make sure that [Google Fit](https://play.google.com/store/apps/details?id=com.google.android.apps.fitness) | ||
is installed (to ensure that steps are being counted). | ||
- Run `flutter run` and choose your physical device. | ||
- Install [Health Connect](https://play.google.com/store/apps/details?id=com.google.android.apps.healthdata) | ||
and grant access to Google Fit and the *jni_demo* app. | ||
|
||
## Project stucture | ||
|
||
* `src`: Contains the native source code, and a CMakeLists.txt file for building | ||
that source code into a dynamic library. | ||
## Project structure | ||
|
||
* `src`: Contains the native source code, and a `CMakeLists.txt` file for | ||
building that source code into a dynamic library. | ||
|
||
* `lib`: Contains the Dart code that defines the API of the plugin, and which | ||
* `lib`: Contains the Dart code that defines the API of the plugin and | ||
calls into the native code using `dart:ffi`. | ||
|
||
* platform folders (`ios` etc.): Contains the build files | ||
for building and bundling the native code library with the platform application. | ||
* platform folders (`ios` etc.): Contain the build files for | ||
building and bundling the native code library with the platform application. | ||
|
||
* `example`: Contains the native source code for building | ||
that source code into a dynamic library. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters