84 lines
2.8 KiB
Markdown
84 lines
2.8 KiB
Markdown
# CSharp to Flutter
|
|
|
|
## Requirements
|
|
|
|
All the following tools must be in your `PATH` :
|
|
|
|
* All platforms
|
|
+ [Bash >= 4.0](https://www.gnu.org/software/bash/)
|
|
+ [BeyondNetGen](https://github.com/royalapplications/beyondnet)
|
|
+ [Android NDK](https://developer.android.com/ndk/downloads) if you want to build for Android
|
|
* MacOS
|
|
+ [XCode](https://developer.apple.com/xcode/) if you want to build for iOS
|
|
|
|
## Quick start
|
|
|
|
> **Warning** Your dotnet project must be at the root of this repository
|
|
|
|
Simply run the build script
|
|
|
|
```bash
|
|
./build.sh -i MyLib.Managed
|
|
```
|
|
|
|
More advanced usage:
|
|
|
|
> Context: You want to build a library named `AwesomeFeature` for Android only, and you have the Android NDK installed in `$ANDROID_NDK_ROOT` but not in `$ANDROID_NDK_HOME` .
|
|
|
|
```bash
|
|
./build.sh -i AwesomeFeature --ndk $ANDROID_NDK_ROOT --no-ios
|
|
```
|
|
|
|
[](./demo.cast)
|
|
|
|
> **Note** Open the recording with [asciinema](https://asciinema.org/) or by clicking on the image above
|
|
|
|
## Usage
|
|
|
|
```shell-session
|
|
Usage: ./build.sh [options]
|
|
Options:
|
|
-h, --help Print this help and exit
|
|
-i Input project name (required)
|
|
-g Generated project name (default: <input-project-name>. Generated)
|
|
-o Output folder name (default: libs)
|
|
-y Assume yes to all prompts
|
|
--ndk Android NDK path (default: ANDROID_NDK_HOME environment variable)
|
|
--no-android Disable Android build (default: false)
|
|
--no-ios Disable iOS build (default: false)
|
|
--input-spec Input project . NET spec (default: net8.0)
|
|
--output-spec Output project . NET spec (default: net8.0)
|
|
|
|
```
|
|
|
|
## What is this?
|
|
|
|
This script:
|
|
* Run `dotnet publish` on the CoreRT managed library to get intermediate dlls
|
|
* Copy configuration files templates
|
|
* Android:
|
|
* Run `beyondnetgen` to generate the C header file and the *unmanaged* csharp code
|
|
* Build a complete intermediate csproject with the *unmanaged* csharp code and the generated header file
|
|
* Run `dotnet publish` on the *unmanaged* csharp code for the target platforms.
|
|
* iOS:
|
|
* Run `beyondnetgen` and follow full process to get xframework
|
|
* Copy the generated files to the output folder
|
|
|
|
## Notes for external dependencies
|
|
|
|
Sometimes, you need to use external dependencies in your library. For example, your library may use Autofac or Newtonsoft.Json.
|
|
|
|
In this case, you need to add the dependencies as **DLL assemblies** in the `external` folder.
|
|
|
|
> **Warning** You must modify the csproj of the original library to reference the external dependencies.
|
|
|
|
```xml
|
|
<!-- In Dali.Toolkit for example, replace original references by this -->
|
|
<ItemGroup>
|
|
<!-- Need to use dll ref here -->
|
|
<Reference Include="../external/Autofac.dll" />
|
|
</ItemGroup>
|
|
```
|
|
|
|
Then during the build, the script will automatically add the external dependencies to the generated project.
|