Skip to content
This repository was archived by the owner on Feb 11, 2024. It is now read-only.

Flutter support #18

Merged
merged 22 commits into from
Aug 4, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
cf87c48
flutter support: initial commit
unsuitable001 Jul 27, 2021
11e8c11
implement: android support
unsuitable001 Jul 27, 2021
d0ea739
CI: exclude flutter sample from dart analyze
unsuitable001 Jul 27, 2021
1b6a8a2
flutter: add linux support
unsuitable001 Jul 28, 2021
6094162
update tools/setup for android
unsuitable001 Jul 28, 2021
bafdd35
flutter: add windows support
unsuitable001 Jul 28, 2021
bd49741
update readme for android support
unsuitable001 Jul 28, 2021
875cc3a
str interpolate -> package:path join & adding constants
unsuitable001 Jul 29, 2021
a631548
remove circular ref in map
unsuitable001 Jul 29, 2021
0488e0e
make androidPath final
unsuitable001 Jul 29, 2021
2481e54
add flutter platform keys for desktops
unsuitable001 Aug 1, 2021
e0bdfb8
readme fixes and CI from Dart -> Flutter
unsuitable001 Aug 2, 2021
3870e67
update ci
unsuitable001 Aug 4, 2021
9fa8327
remove boilerplate widget_test
unsuitable001 Aug 4, 2021
edb24bd
ci check success on each step
unsuitable001 Aug 4, 2021
59da4ee
ci: remove successs check at wrong place
unsuitable001 Aug 4, 2021
3adf06f
change exit code in case of build failure
unsuitable001 Aug 4, 2021
3a4c1d7
remove linking with dart.lib (windows) and int -> size_t for strlen
unsuitable001 Aug 4, 2021
3dbaf29
add `flutter create` boilerplate modification notes
unsuitable001 Aug 4, 2021
d26ed08
Network -> network
unsuitable001 Aug 4, 2021
5c58ed6
yet another typo :sweat:
unsuitable001 Aug 4, 2021
4cdcc6c
change download url
unsuitable001 Aug 4, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ doc/api/
.history
.vscode
compile_commands.json
*.log

# IntelliJ
*.iml
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.0.4

* Added support for Android and Flutter Desktops (Windows/Linux).

## 0.0.3

* Using `package:args` for handling CLI arguments.
Expand Down
3 changes: 0 additions & 3 deletions android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,6 @@ android {

defaultConfig {
minSdkVersion 16
ndk {
abiFilters 'arm64-v8a'
}
}
}

Expand Down
31 changes: 31 additions & 0 deletions bin/setup.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:args/command_runner.dart';
import 'package:cli_util/cli_logging.dart' show Ansi, Logger;
import 'package:cronet/src/constants.dart';
import 'package:cronet/src/third_party/ffigen/find_resource.dart';
import 'package:path/path.dart';

// Extracts a tar.gz file.
void extract(String fileName, [String dir = '']) {
Expand All @@ -28,13 +29,40 @@ void extract(String fileName, [String dir = '']) {
}
}

/// Places downloaded mobile binaries to proper location.
void placeMobileBinaries(String platform, String fileName) {
final android =
'${findPackageRoot().toFilePath(windows: Platform.isWindows)}/android';
Directory('$android/libs').createSync();
Directory('$binaryStorageDir/$platform/libs').listSync().forEach((jar) {
if (jar is File) {
jar.renameSync('$android/libs/${basename(jar.path)}');
}
});
Directory('$android/src/main/jniLibs').createSync();
Directory('$binaryStorageDir/$platform/jniLibs')
.listSync(recursive: true)
.forEach((cronet) {
if (cronet is File) {
Directory('$android/src/main/jniLibs/${basename(cronet.parent.path)}')
.createSync();
cronet.renameSync(
'$android/src/main/jniLibs/${basename(cronet.parent.path)}'
'/${basename(cronet.path)}');
}
});
}

/// Places downloaded binaries to proper location.
void placeBinaries(String platform, String fileName) {
final logger = Logger.standard();
final ansi = Ansi(Ansi.terminalSupportsAnsi);
logger.stdout('${ansi.yellow}Extracting Cronet for $platform${ansi.none}');
Directory(binaryStorageDir).createSync(recursive: true);
extract(fileName, binaryStorageDir);
if (mobilePlatforms.contains(platform)) {
placeMobileBinaries(platform, fileName);
}
logger.stdout('Done! Cleaning up...');

File(fileName).deleteSync();
Expand Down Expand Up @@ -238,6 +266,9 @@ Future<void> main(List<String> args) async {
if (validPlatforms.contains('${Platform.operatingSystem}64')) {
await downloadCronetBinaries('${Platform.operatingSystem}64');
}
if (Directory('android').existsSync()) {
await downloadCronetBinaries('android');
}
} else {
await runner.run(args);
}
Expand Down
8 changes: 5 additions & 3 deletions lib/src/constants.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@

import 'dart:io' show Platform;

const validPlatforms = ['linux64', 'windows64', 'macos64'];
const tag = 'binaries-v0.0.2';
const desktopPlatforms = ['linux64', 'windows64', 'macos64'];
const mobilePlatforms = ['android'];
List<String> get validPlatforms => desktopPlatforms + mobilePlatforms;
const tag = 'binaries-v0.0.4';
const cronetBinaryUrl =
'https://github.com/google/cronet.dart/releases/download/$tag/';
'https://github.com/unsuitable001/cronet.dart/releases/download/$tag/';
const cronetVersion = "86.0.4240.198";
const wrapperVersion = "1";

Expand Down
5 changes: 4 additions & 1 deletion lib/src/third_party/ffigen/find_resource.dart
Original file line number Diff line number Diff line change
Expand Up @@ -60,5 +60,8 @@ bool isCronetAvailable(String platform) {
.existsSync() &&
File.fromUri(Directory.current.uri.resolve(getCronetName(platform)))
.existsSync();
return cronetBinaries || inRoot;
final inAndroidDir = platform == 'android' &&
File.fromUri(findPackageRoot().resolve('android/libs/cronet_api.jar'))
.existsSync();
return cronetBinaries || inRoot || inAndroidDir;
}
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# BSD-style license that can be found in the LICENSE file.

name: cronet
version: 0.0.3
version: 0.0.4
homepage: https://github.com/google/cronet.dart
description: Experimental Cronet dart bindings.

Expand Down
29 changes: 28 additions & 1 deletion tool/update_tars.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
import 'dart:io';

import 'package:cronet/src/constants.dart';
import 'package:cronet/src/third_party/ffigen/find_resource.dart';
import 'package:path/path.dart';

void main() {
Directory.current = Directory.current.uri.resolve('.dart_tool/cronet').path;
for (final platform in validPlatforms) {
for (final platform in desktopPlatforms) {
if (File('$platform/${getCronetName(platform)}').existsSync()) {
final result =
Process.runSync('tar', ['-czvf', '$platform.tar.gz', platform]);
Expand All @@ -20,4 +22,29 @@ void main() {
'${getCronetName(platform)} not found in .dart_tool/cronet/$platform');
}
}
// Make tarball for android releases.
final android =
'${findPackageRoot().toFilePath(windows: Platform.isWindows)}/android';
if (!Directory('$android/libs').existsSync()) return;
Directory('android/libs').createSync(recursive: true);
Directory('$android/libs/').listSync().forEach((jar) {
if (jar is File) {
print(jar);
jar.copySync('android/libs/${basename(jar.path)}');
}
});
Directory('android/jniLibs').createSync(recursive: true);
Directory('$android/src/main/jniLibs/')
.listSync(recursive: true)
.forEach((cronet) {
if (cronet is File) {
print(cronet);
Directory('android/jniLibs/${basename(cronet.parent.path)}').createSync();
cronet.copySync('android/jniLibs/${basename(cronet.parent.path)}'
'/${basename(cronet.path)}');
}
});
final result = Process.runSync('tar', ['-czvf', 'android.tar.gz', 'android']);
print(result.stdout);
print(result.stderr);
}