| // 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 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, stackTrace) { | |
| print('Task exception stack trace:\n$stackTrace'); | |
| return TaskResult.failure(e.toString()); | |
| } | |
| }); | |
| } |