日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

奇淫巧技-Flutter调用C#

發布時間:2023/12/4 C# 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 奇淫巧技-Flutter调用C# 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

眾所周知,Xamarin應該是.net下的跨平臺開發工具。2016年之前還處于收費狀態,后被微軟收購后開源。但似乎有個現象,開源后的Xamarin發展似乎有些停滯,而且維護Xamarin的團隊又很固執不愿變通。社區多次建議UI層應該統一繪圖引擎,而不是映射原生控件。Xamarin.Forms給人的感覺就是性能差,動畫僵硬,效果不好實現。以至于谷歌的Flutter火爆之后,Xamarin社區很多人便轉移陣地,你在百度搜索Xamarin,第一個關鍵詞就是xamarin還有人用么。那么對于C#/.net開發者來說,唯一的問題就是界面,就有了開源項目Xamarin.Flutter,但過完年沒多久,項目就Archived了,adamped說僅靠他和幾個開發人員的業余時間很難搞定。但技術上確實可行,因為Skia在.net下本來就有綁定SkiaSharp,而Flutter底層便使用的Skia引擎。UIWidgets就是在Unity3D下的Flutter實現。那對于我們.net開發者有沒有一種可能就是界面使用Flutter,業務邏輯采用C#呢,答案是可行的,請看如下分解。

環境

為了能夠使用Flutter調用C#,需要如下工具和環境

  • Flutter環境

  • vs2015或者vs2017,并且包含Xamarin安裝。

  • Android Studio, Android SDK,NDKr15c(https://dl.google.com/android/repository/android-ndk-r15c-windows-x86_64.zip)

  • jdk 1.8

  • Embeddinator-4000

前面四項不在贅述,請參考官方文檔,確保Flutter,Xamarin可以運行項目,Android ndk請使用r15c版本,目前好像僅支持r15c,其他未測試。

Embeddinator-4000是將C#轉化為各平臺本機代碼的工具,可以使用Nuget安裝

Install-Package Embeddinator-4000 -Version 0.4.0

將工具路徑添加到系統環境PATH,建議添加nuget的全局緩存,類似C:\Users\Administrator\.nuget\packages\embeddinator-4000\0.4.0\tools

如果工具使用出錯,請檢查sdk,或ndk版本,并確認Xamarin設置sdk,ndk路徑正確。并將如下信息添加進注冊表

Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\Novell][HKEY_CURRENT_USER\Software\Novell\Mono for Android] "AndroidNdkDirectory"="C:\\Program Files (x86)\\Android\\android-sdk\\ndk-bundle" "AndroidSdkDirectory"="C:\\Program Files (x86)\\Android\\android-sdk" "JavaSdkDirectory"="C:\\Program Files\\Android\\jdk\\microsoft_dist_openjdk_1.8.0.25\\"`

因為目前visualstudio的注冊表信息都是對立文件形式,這可能是工具本身的BUG,參加https://github.com/mono/Embeddinator-4000/issues/707

使用方法

1. 創建C#類庫(這里只實現Android 下的方法,iOS類推)

這里我們先創建一個類庫,我們使用Android Class Lib,如果不是Android 的方法,也可以創建普通的類庫

編譯后得到Test4Flutter.dll, 運行如下命令

Embeddinator-4000.exe --gen=java -out=test .\Test4Flutter.dll -p=Android -c

出現MSBUILD : error MSB1008: 只能指定一個項目。請確保路徑下沒有空格,或者復制dll到其他路徑重試

在test目錄下我們得到一個Test4Flutter.aar文件

2.創建一個Flutter插件

Android 里添加Module,具體參考文檔,將Module添加進依賴。

![dump_2046261408567477536](C:\Users\Administrator\Desktop\dump_2046261408567477536.png) public void onMethodCall(MethodCall call, Result result) {if (call.method.equals("getPlatformVersion")) {result.success("Android " + android.os.Build.VERSION.RELEASE);}else if (call.method.equals("getHelloString")){result.success(test.getHelloString());}else if(call.method.equals("add")){result.success(test.add((int)call.argument("x"),(int)call.argument("y")));}else {result.notImplemented();}}static Future<String> getHelloString() async {return await _channel.invokeMethod('getHelloString');}static Future<int> add(int x,int y) async{final int ret = await _channel.invokeMethod('add',<String, dynamic>{'x': x,'y': y,});return ret;}

example內調用測試

調用方法時控制臺會打印如下

很多時候我們應該摒棄語言之爭,語言并無好壞,甚至可以將其融合

總結

以上是生活随笔為你收集整理的奇淫巧技-Flutter调用C#的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。