Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
9e0df259
Unverified
Commit
9e0df259
authored
Nov 11, 2019
by
xster
Committed by
GitHub
Nov 11, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Show a warning when a module uses a v1 only plugin (#44499)
parent
159a47da
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
194 additions
and
133 deletions
+194
-133
plugins.dart
packages/flutter_tools/lib/src/plugins.dart
+10
-0
project.dart
packages/flutter_tools/lib/src/project.dart
+5
-0
plugins_test.dart
packages/flutter_tools/test/general.shard/plugins_test.dart
+179
-133
No files found.
packages/flutter_tools/lib/src/plugins.dart
View file @
9e0df259
...
...
@@ -402,6 +402,16 @@ Future<void> _writeAndroidPluginRegistrant(FlutterProject project, List<Plugin>
for
(
Map
<
String
,
dynamic
>
plugin
in
androidPlugins
)
{
if
(
plugin
[
'supportsEmbeddingV1'
]
&&
!
plugin
[
'supportsEmbeddingV2'
])
{
templateContext
[
'needsShim'
]
=
true
;
if
(
project
.
isModule
)
{
printStatus
(
'The plugin `
${plugin['name']}
` is built using an older version '
"of the Android plugin API which assumes that it's running in a "
'full-Flutter environment. It may have undefined behaviors when '
'Flutter is integrated into an existing app as a module.
\n
'
'The plugin can be updated to the v2 Android Plugin APIs by '
'following https://flutter.dev/go/android-plugin-migration.'
);
}
break
;
}
}
...
...
packages/flutter_tools/lib/src/project.dart
View file @
9e0df259
...
...
@@ -645,6 +645,11 @@ class AndroidProject {
}
AndroidEmbeddingVersion
getEmbeddingVersion
()
{
if
(
isModule
)
{
// A module type's Android project is used in add-to-app scenarios and
// only supports the V2 embedding.
return
AndroidEmbeddingVersion
.
v2
;
}
if
(
appManifestFile
==
null
||
!
appManifestFile
.
existsSync
())
{
return
AndroidEmbeddingVersion
.
v1
;
}
...
...
packages/flutter_tools/test/general.shard/plugins_test.dart
View file @
9e0df259
...
...
@@ -55,7 +55,7 @@ void main() {
dummyPackageDirectory
=
fs
.
directory
(
'/pubcache/apackage/lib/'
);
packagesFile
=
fs
.
file
(
fs
.
path
.
join
(
flutterProject
.
directory
.
path
,
PackageMap
.
globalPackagesPath
));
packagesFile
..
createSync
(
recursive:
true
)
..
writeAsStringSync
(
'apackage:file://
${dummyPackageDirectory.path}
'
);
..
writeAsStringSync
(
'apackage:file://
${dummyPackageDirectory.path}
\n
'
);
});
// Makes the dummy package pointed to by packagesFile look like a plugin.
...
...
@@ -69,6 +69,126 @@ void main() {
'''
);
}
void
createNewJavaPlugin1
()
{
final
Directory
pluginUsingJavaAndNewEmbeddingDir
=
fs
.
systemTempDirectory
.
createTempSync
(
'flutter_plugin_using_java_and_new_embedding_dir.'
);
pluginUsingJavaAndNewEmbeddingDir
.
childFile
(
'pubspec.yaml'
)
.
writeAsStringSync
(
'''
flutter:
plugin:
androidPackage: plugin1
pluginClass: UseNewEmbedding
'''
);
pluginUsingJavaAndNewEmbeddingDir
.
childDirectory
(
'android'
)
.
childDirectory
(
'src'
)
.
childDirectory
(
'main'
)
.
childDirectory
(
'java'
)
.
childDirectory
(
'plugin1'
)
.
childFile
(
'UseNewEmbedding.java'
)
..
createSync
(
recursive:
true
)
..
writeAsStringSync
(
'import io.flutter.embedding.engine.plugins.FlutterPlugin;'
);
flutterProject
.
directory
.
childFile
(
'.packages'
)
.
writeAsStringSync
(
'plugin1:
${pluginUsingJavaAndNewEmbeddingDir.childDirectory('lib').uri.toString()}
\n
'
,
mode:
FileMode
.
append
,
);
}
void
createNewKotlinPlugin2
()
{
final
Directory
pluginUsingKotlinAndNewEmbeddingDir
=
fs
.
systemTempDirectory
.
createTempSync
(
'flutter_plugin_using_kotlin_and_new_embedding_dir.'
);
pluginUsingKotlinAndNewEmbeddingDir
.
childFile
(
'pubspec.yaml'
)
.
writeAsStringSync
(
'''
flutter:
plugin:
androidPackage: plugin2
pluginClass: UseNewEmbedding
'''
);
pluginUsingKotlinAndNewEmbeddingDir
.
childDirectory
(
'android'
)
.
childDirectory
(
'src'
)
.
childDirectory
(
'main'
)
.
childDirectory
(
'kotlin'
)
.
childDirectory
(
'plugin2'
)
.
childFile
(
'UseNewEmbedding.kt'
)
..
createSync
(
recursive:
true
)
..
writeAsStringSync
(
'import io.flutter.embedding.engine.plugins.FlutterPlugin'
);
flutterProject
.
directory
.
childFile
(
'.packages'
)
.
writeAsStringSync
(
'plugin2:
${pluginUsingKotlinAndNewEmbeddingDir.childDirectory('lib').uri.toString()}
\n
'
,
mode:
FileMode
.
append
,
);
}
void
createOldJavaPlugin3
()
{
final
Directory
pluginUsingOldEmbeddingDir
=
fs
.
systemTempDirectory
.
createTempSync
(
'flutter_plugin_using_old_embedding_dir.'
);
pluginUsingOldEmbeddingDir
.
childFile
(
'pubspec.yaml'
)
.
writeAsStringSync
(
'''
flutter:
plugin:
androidPackage: plugin3
pluginClass: UseOldEmbedding
'''
);
pluginUsingOldEmbeddingDir
.
childDirectory
(
'android'
)
.
childDirectory
(
'src'
)
.
childDirectory
(
'main'
)
.
childDirectory
(
'java'
)
.
childDirectory
(
'plugin3'
)
.
childFile
(
'UseOldEmbedding.java'
)
..
createSync
(
recursive:
true
);
flutterProject
.
directory
.
childFile
(
'.packages'
)
.
writeAsStringSync
(
'plugin3:
${pluginUsingOldEmbeddingDir.childDirectory('lib').uri.toString()}
\n
'
,
mode:
FileMode
.
append
,
);
}
void
createDualSupportJavaPlugin4
()
{
final
Directory
pluginUsingJavaAndNewEmbeddingDir
=
fs
.
systemTempDirectory
.
createTempSync
(
'flutter_plugin_using_java_and_new_embedding_dir.'
);
pluginUsingJavaAndNewEmbeddingDir
.
childFile
(
'pubspec.yaml'
)
.
writeAsStringSync
(
'''
flutter:
plugin:
androidPackage: plugin4
pluginClass: UseBothEmbedding
'''
);
pluginUsingJavaAndNewEmbeddingDir
.
childDirectory
(
'android'
)
.
childDirectory
(
'src'
)
.
childDirectory
(
'main'
)
.
childDirectory
(
'java'
)
.
childDirectory
(
'plugin4'
)
.
childFile
(
'UseBothEmbedding.java'
)
..
createSync
(
recursive:
true
)
..
writeAsStringSync
(
'import io.flutter.embedding.engine.plugins.FlutterPlugin;
\n
'
'PluginRegistry
\n
'
'registerWith(Irrelevant registrar)
\n
'
);
flutterProject
.
directory
.
childFile
(
'.packages'
)
.
writeAsStringSync
(
'plugin4:
${pluginUsingJavaAndNewEmbeddingDir.childDirectory('lib').uri.toString()}
'
,
mode:
FileMode
.
append
,
);
}
// Creates the files that would indicate that pod install has run for the
// given project.
void
simulatePodInstallRun
(
XcodeBasedProject
project
)
{
...
...
@@ -149,6 +269,7 @@ void main() {
expect
(
registrant
.
existsSync
(),
isTrue
);
expect
(
registrant
.
readAsStringSync
(),
contains
(
'package io.flutter.plugins'
));
expect
(
registrant
.
readAsStringSync
(),
contains
(
'class GeneratedPluginRegistrant'
));
expect
(
registrant
.
readAsStringSync
(),
contains
(
'public static void registerWith(PluginRegistry registry)'
));
},
overrides:
<
Type
,
Generator
>{
FileSystem:
()
=>
fs
,
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
...
...
@@ -168,6 +289,7 @@ void main() {
expect
(
registrant
.
existsSync
(),
isTrue
);
expect
(
registrant
.
readAsStringSync
(),
contains
(
'package io.flutter.plugins'
));
expect
(
registrant
.
readAsStringSync
(),
contains
(
'class GeneratedPluginRegistrant'
));
expect
(
registrant
.
readAsStringSync
(),
contains
(
'public static void registerWith(@NonNull FlutterEngine flutterEngine)'
));
},
overrides:
<
Type
,
Generator
>{
FileSystem:
()
=>
fs
,
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
...
...
@@ -178,72 +300,9 @@ void main() {
when
(
flutterProject
.
isModule
).
thenReturn
(
false
);
when
(
androidProject
.
getEmbeddingVersion
()).
thenReturn
(
AndroidEmbeddingVersion
.
v2
);
final
Directory
pluginUsingJavaAndNewEmbeddingDir
=
fs
.
systemTempDirectory
.
createTempSync
(
'flutter_plugin_using_java_and_new_embedding_dir.'
);
pluginUsingJavaAndNewEmbeddingDir
.
childFile
(
'pubspec.yaml'
)
.
writeAsStringSync
(
'''
flutter:
plugin:
androidPackage: plugin1
pluginClass: UseNewEmbedding
'''
);
pluginUsingJavaAndNewEmbeddingDir
.
childDirectory
(
'android'
)
.
childDirectory
(
'src'
)
.
childDirectory
(
'main'
)
.
childDirectory
(
'java'
)
.
childDirectory
(
'plugin1'
)
.
childFile
(
'UseNewEmbedding.java'
)
..
createSync
(
recursive:
true
)
..
writeAsStringSync
(
'import io.flutter.embedding.engine.plugins.FlutterPlugin;'
);
final
Directory
pluginUsingKotlinAndNewEmbeddingDir
=
fs
.
systemTempDirectory
.
createTempSync
(
'flutter_plugin_using_kotlin_and_new_embedding_dir.'
);
pluginUsingKotlinAndNewEmbeddingDir
.
childFile
(
'pubspec.yaml'
)
.
writeAsStringSync
(
'''
flutter:
plugin:
androidPackage: plugin2
pluginClass: UseNewEmbedding
'''
);
pluginUsingKotlinAndNewEmbeddingDir
.
childDirectory
(
'android'
)
.
childDirectory
(
'src'
)
.
childDirectory
(
'main'
)
.
childDirectory
(
'kotlin'
)
.
childDirectory
(
'plugin2'
)
.
childFile
(
'UseNewEmbedding.kt'
)
..
createSync
(
recursive:
true
)
..
writeAsStringSync
(
'import io.flutter.embedding.engine.plugins.FlutterPlugin'
);
final
Directory
pluginUsingOldEmbeddingDir
=
fs
.
systemTempDirectory
.
createTempSync
(
'flutter_plugin_using_old_embedding_dir.'
);
pluginUsingOldEmbeddingDir
.
childFile
(
'pubspec.yaml'
)
.
writeAsStringSync
(
'''
flutter:
plugin:
androidPackage: plugin3
pluginClass: UseOldEmbedding
'''
);
pluginUsingOldEmbeddingDir
.
childDirectory
(
'android'
)
.
childDirectory
(
'src'
)
.
childDirectory
(
'main'
)
.
childDirectory
(
'java'
)
.
childDirectory
(
'plugin3'
)
.
childFile
(
'UseOldEmbedding.java'
)
..
createSync
(
recursive:
true
);
flutterProject
.
directory
.
childFile
(
'.packages'
)
.
writeAsStringSync
(
'''
plugin1:
${pluginUsingJavaAndNewEmbeddingDir.childDirectory('lib').uri.toString()}
plugin2:
${pluginUsingKotlinAndNewEmbeddingDir.childDirectory('lib').uri.toString()}
plugin3:
${pluginUsingOldEmbeddingDir.childDirectory('lib').uri.toString()}
'''
);
createNewJavaPlugin1
();
createNewKotlinPlugin2
();
createOldJavaPlugin3
();
await
injectPlugins
(
flutterProject
);
...
...
@@ -258,6 +317,8 @@ plugin3:${pluginUsingOldEmbeddingDir.childDirectory('lib').uri.toString()}
expect
(
registrant
.
readAsStringSync
(),
contains
(
'plugin3.UseOldEmbedding.registerWith(shimPluginRegistry.registrarFor("plugin3.UseOldEmbedding"));'
));
// There should be no warning message
expect
(
testLogger
.
statusText
,
isNot
(
contains
(
'go/android-plugin-migration'
)));
},
overrides:
<
Type
,
Generator
>{
FileSystem:
()
=>
fs
,
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
...
...
@@ -269,31 +330,8 @@ plugin3:${pluginUsingOldEmbeddingDir.childDirectory('lib').uri.toString()}
when
(
flutterProject
.
isModule
).
thenReturn
(
false
);
when
(
androidProject
.
getEmbeddingVersion
()).
thenReturn
(
AndroidEmbeddingVersion
.
v1
);
final
Directory
pluginUsingJavaAndNewEmbeddingDir
=
fs
.
systemTempDirectory
.
createTempSync
(
'flutter_plugin_using_java_and_new_embedding_dir.'
);
pluginUsingJavaAndNewEmbeddingDir
.
childFile
(
'pubspec.yaml'
)
.
writeAsStringSync
(
'''
flutter:
plugin:
androidPackage: plugin1
pluginClass: UseNewEmbedding
'''
);
pluginUsingJavaAndNewEmbeddingDir
.
childDirectory
(
'android'
)
.
childDirectory
(
'src'
)
.
childDirectory
(
'main'
)
.
childDirectory
(
'java'
)
.
childDirectory
(
'plugin1'
)
.
childFile
(
'UseNewEmbedding.java'
)
..
createSync
(
recursive:
true
)
..
writeAsStringSync
(
'import io.flutter.embedding.engine.plugins.FlutterPlugin;'
);
createNewJavaPlugin1
();
flutterProject
.
directory
.
childFile
(
'.packages'
)
.
writeAsStringSync
(
'''
plugin1:
${pluginUsingJavaAndNewEmbeddingDir.childDirectory('lib').uri.toString()}
'''
);
await
expectLater
(
()
async
{
await
injectPlugins
(
flutterProject
);
...
...
@@ -310,39 +348,12 @@ plugin1:${pluginUsingJavaAndNewEmbeddingDir.childDirectory('lib').uri.toString()
XcodeProjectInterpreter:
()
=>
xcodeProjectInterpreter
,
});
testUsingContext
(
'
allows app use
a plugin that supports v1 and v2 embedding'
,
()
async
{
testUsingContext
(
'
old embedding app uses
a plugin that supports v1 and v2 embedding'
,
()
async
{
when
(
flutterProject
.
isModule
).
thenReturn
(
false
);
when
(
androidProject
.
getEmbeddingVersion
()).
thenReturn
(
AndroidEmbeddingVersion
.
v1
);
final
Directory
pluginUsingJavaAndNewEmbeddingDir
=
fs
.
systemTempDirectory
.
createTempSync
(
'flutter_plugin_using_java_and_new_embedding_dir.'
);
pluginUsingJavaAndNewEmbeddingDir
.
childFile
(
'pubspec.yaml'
)
.
writeAsStringSync
(
'''
flutter:
plugin:
androidPackage: plugin1
pluginClass: UseNewEmbedding
'''
);
pluginUsingJavaAndNewEmbeddingDir
.
childDirectory
(
'android'
)
.
childDirectory
(
'src'
)
.
childDirectory
(
'main'
)
.
childDirectory
(
'java'
)
.
childDirectory
(
'plugin1'
)
.
childFile
(
'UseNewEmbedding.java'
)
..
createSync
(
recursive:
true
)
..
writeAsStringSync
(
'import io.flutter.embedding.engine.plugins.FlutterPlugin;
\n
'
'PluginRegistry
\n
'
'registerWith(Irrelevant registrar)
\n
'
);
createDualSupportJavaPlugin4
();
flutterProject
.
directory
.
childFile
(
'.packages'
)
.
writeAsStringSync
(
'''
plugin1:
${pluginUsingJavaAndNewEmbeddingDir.childDirectory('lib').uri.toString()}
'''
);
await
injectPlugins
(
flutterProject
);
final
File
registrant
=
flutterProject
.
directory
...
...
@@ -352,6 +363,8 @@ plugin1:${pluginUsingJavaAndNewEmbeddingDir.childDirectory('lib').uri.toString()
expect
(
registrant
.
existsSync
(),
isTrue
);
expect
(
registrant
.
readAsStringSync
(),
contains
(
'package io.flutter.plugins'
));
expect
(
registrant
.
readAsStringSync
(),
contains
(
'class GeneratedPluginRegistrant'
));
expect
(
registrant
.
readAsStringSync
(),
contains
(
'UseBothEmbedding.registerWith(registry.registrarFor("plugin4.UseBothEmbedding"));'
));
},
overrides:
<
Type
,
Generator
>{
FileSystem:
()
=>
fs
,
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
...
...
@@ -359,9 +372,11 @@ plugin1:${pluginUsingJavaAndNewEmbeddingDir.childDirectory('lib').uri.toString()
XcodeProjectInterpreter:
()
=>
xcodeProjectInterpreter
,
});
testUsingContext
(
'
Registrant doesn
\'
t use new embedding if app doesn
\'
t use new
embedding'
,
()
async
{
testUsingContext
(
'
new embedding app uses a plugin that supports v1 and v2
embedding'
,
()
async
{
when
(
flutterProject
.
isModule
).
thenReturn
(
false
);
when
(
androidProject
.
getEmbeddingVersion
()).
thenReturn
(
AndroidEmbeddingVersion
.
v1
);
when
(
androidProject
.
getEmbeddingVersion
()).
thenReturn
(
AndroidEmbeddingVersion
.
v2
);
createDualSupportJavaPlugin4
();
await
injectPlugins
(
flutterProject
);
...
...
@@ -372,15 +387,18 @@ plugin1:${pluginUsingJavaAndNewEmbeddingDir.childDirectory('lib').uri.toString()
expect
(
registrant
.
existsSync
(),
isTrue
);
expect
(
registrant
.
readAsStringSync
(),
contains
(
'package io.flutter.plugins'
));
expect
(
registrant
.
readAsStringSync
(),
contains
(
'class GeneratedPluginRegistrant'
));
expect
(
registrant
.
readAsStringSync
(),
contains
(
'flutterEngine.getPlugins().add(new plugin4.UseBothEmbedding());'
));
},
overrides:
<
Type
,
Generator
>{
FileSystem:
()
=>
fs
,
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
FeatureFlags:
()
=>
featureFlags
,
XcodeProjectInterpreter:
()
=>
xcodeProjectInterpreter
,
});
testUsingContext
(
'
Registrant uses old embedding in module project
'
,
()
async
{
testUsingContext
(
'
Modules use new embedding
'
,
()
async
{
when
(
flutterProject
.
isModule
).
thenReturn
(
true
);
when
(
androidProject
.
getEmbeddingVersion
()).
thenReturn
(
AndroidEmbeddingVersion
.
v
1
);
when
(
androidProject
.
getEmbeddingVersion
()).
thenReturn
(
AndroidEmbeddingVersion
.
v
2
);
await
injectPlugins
(
flutterProject
);
...
...
@@ -391,48 +409,76 @@ plugin1:${pluginUsingJavaAndNewEmbeddingDir.childDirectory('lib').uri.toString()
expect
(
registrant
.
existsSync
(),
isTrue
);
expect
(
registrant
.
readAsStringSync
(),
contains
(
'package io.flutter.plugins'
));
expect
(
registrant
.
readAsStringSync
(),
contains
(
'class GeneratedPluginRegistrant'
));
expect
(
registrant
.
readAsStringSync
(),
contains
(
'public static void registerWith(@NonNull FlutterEngine flutterEngine)'
));
},
overrides:
<
Type
,
Generator
>{
FileSystem:
()
=>
fs
,
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
FeatureFlags:
()
=>
featureFlags
,
});
testUsingContext
(
'Module using old plugin shows warning'
,
()
async
{
when
(
flutterProject
.
isModule
).
thenReturn
(
true
);
when
(
androidProject
.
getEmbeddingVersion
()).
thenReturn
(
AndroidEmbeddingVersion
.
v2
);
createOldJavaPlugin3
();
await
injectPlugins
(
flutterProject
);
final
File
registrant
=
flutterProject
.
directory
.
childDirectory
(
fs
.
path
.
join
(
'android'
,
'app'
,
'src'
,
'main'
,
'java'
,
'io'
,
'flutter'
,
'plugins'
))
.
childFile
(
'GeneratedPluginRegistrant.java'
);
expect
(
registrant
.
readAsStringSync
(),
contains
(
'plugin3.UseOldEmbedding.registerWith(shimPluginRegistry.registrarFor("plugin3.UseOldEmbedding"));'
));
expect
(
testLogger
.
statusText
,
contains
(
'The plugin `plugin3` is built using an older version of the Android plugin API'
));
},
overrides:
<
Type
,
Generator
>{
FileSystem:
()
=>
fs
,
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
FeatureFlags:
()
=>
featureFlags
,
XcodeProjectInterpreter:
()
=>
xcodeProjectInterpreter
,
});
testUsingContext
(
'
Registrant uses new embedding if module uses new embedding
'
,
()
async
{
testUsingContext
(
'
Module using new plugin shows no warnings
'
,
()
async
{
when
(
flutterProject
.
isModule
).
thenReturn
(
true
);
when
(
androidProject
.
getEmbeddingVersion
()).
thenReturn
(
AndroidEmbeddingVersion
.
v2
);
createNewJavaPlugin1
();
await
injectPlugins
(
flutterProject
);
final
File
registrant
=
flutterProject
.
directory
.
childDirectory
(
fs
.
path
.
join
(
'android'
,
'app'
,
'src'
,
'main'
,
'java'
,
'io'
,
'flutter'
,
'plugins'
))
.
childFile
(
'GeneratedPluginRegistrant.java'
);
expect
(
registrant
.
readAsStringSync
(),
contains
(
'flutterEngine.getPlugins().add(new plugin1.UseNewEmbedding());'
));
expect
(
registrant
.
existsSync
(),
isTrue
);
expect
(
registrant
.
readAsStringSync
(),
contains
(
'package io.flutter.plugins'
));
expect
(
registrant
.
readAsStringSync
(),
contains
(
'class GeneratedPluginRegistrant'
));
expect
(
testLogger
.
statusText
,
isNot
(
contains
(
'go/android-plugin-migration'
)));
},
overrides:
<
Type
,
Generator
>{
FileSystem:
()
=>
fs
,
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
FeatureFlags:
()
=>
featureFlags
,
XcodeProjectInterpreter:
()
=>
xcodeProjectInterpreter
,
});
testUsingContext
(
'
Registrant doesn
\'
t use new embedding if module doesn
\'
t use new embedd
ing'
,
()
async
{
testUsingContext
(
'
Module using plugin with v1 and v2 support shows no warn
ing'
,
()
async
{
when
(
flutterProject
.
isModule
).
thenReturn
(
true
);
when
(
androidProject
.
getEmbeddingVersion
()).
thenReturn
(
AndroidEmbeddingVersion
.
v1
);
when
(
androidProject
.
getEmbeddingVersion
()).
thenReturn
(
AndroidEmbeddingVersion
.
v2
);
createDualSupportJavaPlugin4
();
await
injectPlugins
(
flutterProject
);
final
File
registrant
=
flutterProject
.
directory
.
childDirectory
(
fs
.
path
.
join
(
'android'
,
'app'
,
'src'
,
'main'
,
'java'
,
'io'
,
'flutter'
,
'plugins'
))
.
childFile
(
'GeneratedPluginRegistrant.java'
);
expect
(
registrant
.
readAsStringSync
(),
contains
(
'flutterEngine.getPlugins().add(new plugin4.UseBothEmbedding());'
));
expect
(
registrant
.
existsSync
(),
isTrue
);
expect
(
registrant
.
readAsStringSync
(),
contains
(
'package io.flutter.plugins'
));
expect
(
registrant
.
readAsStringSync
(),
contains
(
'class GeneratedPluginRegistrant'
));
expect
(
testLogger
.
statusText
,
isNot
(
contains
(
'go/android-plugin-migration'
)));
},
overrides:
<
Type
,
Generator
>{
FileSystem:
()
=>
fs
,
ProcessManager:
()
=>
FakeProcessManager
.
any
(),
FeatureFlags:
()
=>
featureFlags
,
XcodeProjectInterpreter:
()
=>
xcodeProjectInterpreter
,
});
testUsingContext
(
'Does not throw when AndroidManifest.xml is not found'
,
()
async
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment