A Flutter package binds to Cronet's native API to expose them
Experimental Cronet Dart bindings
This package binds to Cronet's native API to expose them in Dart.
This is a GSoC 2021 project.
Supported Platforms
Currently, 64 bit Android and Desktop Platforms (Linux, Windows and MacOS) are supported.
Requirements
- Dart SDK 2.12.0 or above.
- CMake 3.10 or above. (If on windows, Visual Studio 2019 with C++ tools)
- C++ compiler. (g++/clang/msvc)
- Android NDK if targeting Android.
Usage
-
Add package as a dependency in your
pubspec.yaml
. -
Run this from the
root
of your project.flutter pub get flutter pub run cronet:setup # Downloads the cronet binaries.
We need to use
flutter pub
even if we want to use it with Dart CLI. See https://github.com/dart-lang/pub/issues/2606 for further details.*Note for Android: Remember to Add the following permissions in
AndroidManifest.xml
file.<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Optionally, enable cleartext traffic by adding
android:usesCleartextTraffic="true"
toAndroidManifest.xml
file. -
Import
import 'package:cronet/cronet.dart';
Note: Internet connection is required to download cronet binaries.
Example
final client = HttpClient();
client
.getUrl(Uri.parse('http://info.cern.ch/'))
.then((HttpClientRequest request) {
return request.close();
}).then((HttpClientResponse response) {
response.transform(utf8.decoder).listen((contents) {
print(contents);
},
onDone: () => print(
'Done!'));
});
See the API comparison with dart:io
.
Run Example
Flutter
cd example/flutter
flutter pub get
flutter pub run cronet:setup # Downloads the cronet binaries.
flutter run
Dart CLI
cd example/cli
flutter pub get
flutter pub run cronet:setup # Downloads the cronet binaries.
dart run bin/example_dart.dart
Run Tests
flutter pub get
flutter pub run cronet:setup # Downloads the cronet binaries.
flutter test
You can also verify your cronet binaries using dart run cronet:setup verify
.
Make sure to have cmake 3.10
.
Benchmarking
See benchmark summary and extensive reports for comparison with dart:io
.
flutter pub get
flutter pub run cronet:setup # Downloads the cronet binaries.
dart run benchmark/latency.dart # For sequential requests benchmark.
dart run benchmark/throughput.dart # For parallel requests benchmark.
dart run benchmark/run_all.dart # To run all the benchmarks and get reports.
Use -h
to see available cli arguments and usage informations.
To know how to setup local test servers, read benchmarking guide.
Note: Test results may get affected by: https://github.com/google/cronet.dart/issues/11.
Building Your Own
-
Make sure you've downloaded your custom version of cronet shared library and filename follows the pattern
cronet.86.0.4240.198.<extension>
with a prefixlib
if onlinux
. Else, you can build cronet from source using the provided instuctions. Then copy the library to the designated folder. For linux, the files are under.dart_tool/cronet/linux64
. -
Run
dart run cronet:setup build
from the root of your project.
Note for Windows: Run step 2
from x64 Native Tools Command Prompt for VS 2019
shell.
Note for Android: Copy the produced jar files in android/libs
and .so
files in android/src/main/jniLibs
subdirectory from the root of this package.