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
|
||||
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:
|
||||
description: >
|
||||
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