// 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()); } }); }