mirror of
https://github.com/flutter/flutter
synced 2024-11-05 18:37:51 +00:00
106 lines
3.2 KiB
Dart
106 lines
3.2 KiB
Dart
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'dart:io';
|
|
|
|
import 'package:flutter_devicelab/framework/apk_utils.dart';
|
|
import 'package:flutter_devicelab/framework/framework.dart';
|
|
import 'package:flutter_devicelab/framework/task_result.dart';
|
|
import 'package:flutter_devicelab/framework/utils.dart';
|
|
import 'package:path/path.dart' as path;
|
|
|
|
Future<void> main() async {
|
|
await task(() async {
|
|
try {
|
|
await runPluginProjectTest((FlutterPluginProject pluginProject) async {
|
|
|
|
section('check main plugin file exists');
|
|
final File pluginMainKotlinFile = File(
|
|
path.join(
|
|
pluginProject.rootPath,
|
|
'android',
|
|
'src',
|
|
'main',
|
|
'kotlin',
|
|
path.join(
|
|
'com',
|
|
'example',
|
|
'aaa',
|
|
'AaaPlugin.kt',
|
|
),
|
|
),
|
|
);
|
|
|
|
if (!pluginMainKotlinFile.existsSync()) {
|
|
throw TaskResult.failure("Expected ${pluginMainKotlinFile.path} to exist, but it doesn't");
|
|
}
|
|
|
|
section('add java 8 feature');
|
|
pluginMainKotlinFile.writeAsStringSync(r'''
|
|
package com.example.aaa
|
|
|
|
import android.util.Log
|
|
import androidx.annotation.NonNull
|
|
|
|
import io.flutter.embedding.engine.plugins.FlutterPlugin
|
|
import io.flutter.plugin.common.MethodCall
|
|
import io.flutter.plugin.common.MethodChannel
|
|
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
|
|
import io.flutter.plugin.common.MethodChannel.Result
|
|
|
|
import java.util.HashMap
|
|
|
|
/** AaaPlugin */
|
|
class AaaPlugin: FlutterPlugin, MethodCallHandler {
|
|
init {
|
|
val map: HashMap<String, String> = HashMap<String, String>()
|
|
// getOrDefault is a JAVA8 feature.
|
|
Log.d("AaaPlugin", map.getOrDefault("foo", "baz"))
|
|
}
|
|
/// The MethodChannel that will the communication between Flutter and native Android
|
|
///
|
|
/// This local reference serves to register the plugin with the Flutter Engine and unregister it
|
|
/// when the Flutter Engine is detached from the Activity
|
|
private lateinit var channel : MethodChannel
|
|
|
|
override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
|
|
channel = MethodChannel(flutterPluginBinding.binaryMessenger, "aaa")
|
|
channel.setMethodCallHandler(this)
|
|
}
|
|
|
|
override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
|
|
if (call.method == "getPlatformVersion") {
|
|
result.success("Android ${android.os.Build.VERSION.RELEASE}")
|
|
} else {
|
|
result.notImplemented()
|
|
}
|
|
}
|
|
|
|
override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
|
|
channel.setMethodCallHandler(null)
|
|
}
|
|
}
|
|
''');
|
|
|
|
section('Compiles');
|
|
await inDirectory(pluginProject.exampleAndroidPath, () {
|
|
return flutter(
|
|
'build',
|
|
options: <String>[
|
|
'apk',
|
|
'--debug',
|
|
'--target-platform=android-arm',
|
|
],
|
|
);
|
|
});
|
|
|
|
});
|
|
return TaskResult.success(null);
|
|
} on TaskResult catch (taskResult) {
|
|
return taskResult;
|
|
} catch (e) {
|
|
return TaskResult.failure(e.toString());
|
|
}
|
|
});
|
|
}
|