mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
Add2app devicelab test (#18795)
This commit is contained in:
parent
75b737ff69
commit
d4db748047
89
dev/devicelab/bin/tasks/module_test.dart
Normal file
89
dev/devicelab/bin/tasks/module_test.dart
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
// Copyright (c) 2018 The Chromium 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:async';
|
||||||
|
import 'dart:io';
|
||||||
|
import 'package:flutter_devicelab/framework/framework.dart';
|
||||||
|
import 'package:flutter_devicelab/framework/utils.dart';
|
||||||
|
import 'package:path/path.dart' as path;
|
||||||
|
|
||||||
|
/// Tests that the Flutter module project template works and supports
|
||||||
|
/// adding Flutter to an existing Android app.
|
||||||
|
Future<Null> main() async {
|
||||||
|
await task(() async {
|
||||||
|
|
||||||
|
section('Create Flutter module project');
|
||||||
|
|
||||||
|
final Directory directory = await Directory.systemTemp.createTemp('module');
|
||||||
|
try {
|
||||||
|
await inDirectory(directory, () async {
|
||||||
|
await flutter(
|
||||||
|
'create',
|
||||||
|
options: <String>['--org', 'io.flutter.devicelab', '-t', 'module', 'hello'],
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
section('Build Android .aar');
|
||||||
|
|
||||||
|
await inDirectory(new Directory(path.join(directory.path, 'hello', '.android')), () async {
|
||||||
|
await exec('./gradlew', <String>['flutter:assembleDebug']);
|
||||||
|
});
|
||||||
|
|
||||||
|
final bool aarBuilt = exists(new File(path.join(
|
||||||
|
directory.path,
|
||||||
|
'hello',
|
||||||
|
'build',
|
||||||
|
'android_gen',
|
||||||
|
'outputs',
|
||||||
|
'aar',
|
||||||
|
'flutter-debug.aar',
|
||||||
|
)));
|
||||||
|
|
||||||
|
if (!aarBuilt) {
|
||||||
|
return new TaskResult.failure('Failed to build .aar');
|
||||||
|
}
|
||||||
|
|
||||||
|
section('Add to Android app');
|
||||||
|
|
||||||
|
final Directory hostApp = new Directory(path.join(directory.path, 'hello_host_app'));
|
||||||
|
mkdir(hostApp);
|
||||||
|
recursiveCopy(
|
||||||
|
new Directory(path.join(flutterDirectory.path, 'dev', 'integration_tests', 'android_host_app')),
|
||||||
|
hostApp,
|
||||||
|
);
|
||||||
|
copy(
|
||||||
|
new File(path.join(directory.path, 'hello', '.android', 'gradlew')),
|
||||||
|
hostApp,
|
||||||
|
);
|
||||||
|
copy(
|
||||||
|
new File(path.join(directory.path, 'hello', '.android', 'gradle', 'wrapper', 'gradle-wrapper.jar')),
|
||||||
|
new Directory(path.join(hostApp.path, 'gradle', 'wrapper')),
|
||||||
|
);
|
||||||
|
|
||||||
|
await inDirectory(hostApp, () async {
|
||||||
|
await exec('chmod', <String>['+x', 'gradlew']);
|
||||||
|
await exec('./gradlew', <String>['app:assembleDebug']);
|
||||||
|
});
|
||||||
|
|
||||||
|
final bool appBuilt = exists(new File(path.join(
|
||||||
|
hostApp.path,
|
||||||
|
'app',
|
||||||
|
'build',
|
||||||
|
'outputs',
|
||||||
|
'apk',
|
||||||
|
'debug',
|
||||||
|
'app-debug.apk',
|
||||||
|
)));
|
||||||
|
|
||||||
|
if (!appBuilt) {
|
||||||
|
return new TaskResult.failure('Failed to build .apk');
|
||||||
|
}
|
||||||
|
return new TaskResult.success(null);
|
||||||
|
} catch (e) {
|
||||||
|
return new TaskResult.failure(e.toString());
|
||||||
|
} finally {
|
||||||
|
rmTree(directory);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
@ -261,6 +261,13 @@ tasks:
|
|||||||
stage: devicelab
|
stage: devicelab
|
||||||
required_agent_capabilities: ["linux/android"]
|
required_agent_capabilities: ["linux/android"]
|
||||||
|
|
||||||
|
module_test:
|
||||||
|
description: >
|
||||||
|
Checks that the module project template works and supports add2app on Android.
|
||||||
|
stage: devicelab
|
||||||
|
required_agent_capabilities: ["linux/android"]
|
||||||
|
flaky: true
|
||||||
|
|
||||||
flutter_gallery_instrumentation_test:
|
flutter_gallery_instrumentation_test:
|
||||||
description: >
|
description: >
|
||||||
Same as flutter_gallery__transition_perf but uses Android instrumentation
|
Same as flutter_gallery__transition_perf but uses Android instrumentation
|
||||||
|
8
dev/integration_tests/android_host_app/README.md
Normal file
8
dev/integration_tests/android_host_app/README.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Android host app
|
||||||
|
|
||||||
|
Android host app for a Flutter module created using
|
||||||
|
```
|
||||||
|
$ flutter create -t module hello
|
||||||
|
```
|
||||||
|
and placed in a sibling folder to (a clone of) the host app.
|
||||||
|
Used by the `module_test.dart` device lab test.
|
18
dev/integration_tests/android_host_app/app/build.gradle
Normal file
18
dev/integration_tests/android_host_app/app/build.gradle
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
|
android {
|
||||||
|
compileSdkVersion 27
|
||||||
|
defaultConfig {
|
||||||
|
applicationId "io.flutter.add2app"
|
||||||
|
minSdkVersion 16
|
||||||
|
targetSdkVersion 27
|
||||||
|
versionCode 1
|
||||||
|
versionName "1.0"
|
||||||
|
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation project(':flutter')
|
||||||
|
implementation 'com.android.support:appcompat-v7:27.1.1'
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
package="io.flutter.add2app">
|
||||||
|
|
||||||
|
<application android:allowBackup="false"
|
||||||
|
tools:ignore="GoogleAppIndexingWarning,MissingApplicationIcon">
|
||||||
|
<activity android:name=".MainActivity" />
|
||||||
|
</application>
|
||||||
|
</manifest>
|
@ -0,0 +1,14 @@
|
|||||||
|
package io.flutter.add2app;
|
||||||
|
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import io.flutter.facade.Flutter;
|
||||||
|
|
||||||
|
public class MainActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(Flutter.createView(this, getLifecycle(), "route1"));
|
||||||
|
}
|
||||||
|
}
|
20
dev/integration_tests/android_host_app/build.gradle
Normal file
20
dev/integration_tests/android_host_app/build.gradle
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
google()
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
classpath 'com.android.tools.build:gradle:3.1.3'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
allprojects {
|
||||||
|
repositories {
|
||||||
|
google()
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
task clean(type: Delete) {
|
||||||
|
delete rootProject.buildDir
|
||||||
|
}
|
1
dev/integration_tests/android_host_app/gradle.properties
Normal file
1
dev/integration_tests/android_host_app/gradle.properties
Normal file
@ -0,0 +1 @@
|
|||||||
|
org.gradle.jvmargs=-Xmx1536m
|
6
dev/integration_tests/android_host_app/gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
6
dev/integration_tests/android_host_app/gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#Mon Jun 25 14:13:36 CEST 2018
|
||||||
|
distributionBase=GRADLE_USER_HOME
|
||||||
|
distributionPath=wrapper/dists
|
||||||
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
zipStorePath=wrapper/dists
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
|
3
dev/integration_tests/android_host_app/settings.gradle
Normal file
3
dev/integration_tests/android_host_app/settings.gradle
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
include ':app'
|
||||||
|
setBinding(new Binding([gradle: this]))
|
||||||
|
evaluate(new File(settingsDir.parentFile, 'hello/.android/include_flutter.groovy'))
|
Loading…
Reference in New Issue
Block a user