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
dce8f712
Unverified
Commit
dce8f712
authored
Feb 13, 2021
by
Jonah Williams
Committed by
GitHub
Feb 13, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[flutter_tools] do not use context logger in gradle (#75940)
parent
835c7fab
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
90 additions
and
56 deletions
+90
-56
gradle.dart
packages/flutter_tools/lib/src/android/gradle.dart
+41
-42
application_package.dart
packages/flutter_tools/lib/src/application_package.dart
+1
-1
logger.dart
packages/flutter_tools/lib/src/base/logger.dart
+2
-2
terminal.dart
packages/flutter_tools/lib/src/base/terminal.dart
+3
-3
context_runner.dart
packages/flutter_tools/lib/src/context_runner.dart
+3
-1
android_gradle_builder_test.dart
...st/general.shard/android/android_gradle_builder_test.dart
+9
-4
gradle_test.dart
...flutter_tools/test/general.shard/android/gradle_test.dart
+5
-3
logger_test.dart
...es/flutter_tools/test/general.shard/base/logger_test.dart
+26
-0
No files found.
packages/flutter_tools/lib/src/android/gradle.dart
View file @
dce8f712
...
@@ -21,7 +21,7 @@ import '../build_info.dart';
...
@@ -21,7 +21,7 @@ import '../build_info.dart';
import
'../cache.dart'
;
import
'../cache.dart'
;
import
'../convert.dart'
;
import
'../convert.dart'
;
import
'../flutter_manifest.dart'
;
import
'../flutter_manifest.dart'
;
import
'../globals.dart'
as
globals
;
import
'../globals.dart'
as
globals
hide
logger
,
printStatus
,
printTrace
,
printError
;
import
'../project.dart'
;
import
'../project.dart'
;
import
'../reporting/reporting.dart'
;
import
'../reporting/reporting.dart'
;
import
'android_builder.dart'
;
import
'android_builder.dart'
;
...
@@ -136,8 +136,8 @@ Future<File> getGradleAppOut(AndroidProject androidProject) async {
...
@@ -136,8 +136,8 @@ Future<File> getGradleAppOut(AndroidProject androidProject) async {
/// Runs `gradlew dependencies`, ensuring that dependencies are resolved and
/// Runs `gradlew dependencies`, ensuring that dependencies are resolved and
/// potentially downloaded.
/// potentially downloaded.
Future
<
void
>
checkGradleDependencies
()
async
{
Future
<
void
>
checkGradleDependencies
(
Logger
logger
)
async
{
final
Status
progress
=
globals
.
logger
.
startProgress
(
final
Status
progress
=
logger
.
startProgress
(
'Ensuring gradle dependencies are up to date...'
,
'Ensuring gradle dependencies are up to date...'
,
);
);
final
FlutterProject
flutterProject
=
FlutterProject
.
current
();
final
FlutterProject
flutterProject
=
FlutterProject
.
current
();
...
@@ -157,7 +157,7 @@ Future<void> checkGradleDependencies() async {
...
@@ -157,7 +157,7 @@ Future<void> checkGradleDependencies() async {
/// from the existing `settings.gradle` file. This operation will fail if the existing
/// from the existing `settings.gradle` file. This operation will fail if the existing
/// `settings.gradle` file has local edits.
/// `settings.gradle` file has local edits.
@visibleForTesting
@visibleForTesting
void
createSettingsAarGradle
(
Directory
androidDirectory
)
{
void
createSettingsAarGradle
(
Directory
androidDirectory
,
Logger
logger
)
{
final
File
newSettingsFile
=
androidDirectory
.
childFile
(
'settings_aar.gradle'
);
final
File
newSettingsFile
=
androidDirectory
.
childFile
(
'settings_aar.gradle'
);
if
(
newSettingsFile
.
existsSync
())
{
if
(
newSettingsFile
.
existsSync
())
{
return
;
return
;
...
@@ -169,7 +169,7 @@ void createSettingsAarGradle(Directory androidDirectory) {
...
@@ -169,7 +169,7 @@ void createSettingsAarGradle(Directory androidDirectory) {
final
String
currentFileContent
=
currentSettingsFile
.
readAsStringSync
();
final
String
currentFileContent
=
currentSettingsFile
.
readAsStringSync
();
final
String
newSettingsRelativeFile
=
globals
.
fs
.
path
.
relative
(
newSettingsFile
.
path
);
final
String
newSettingsRelativeFile
=
globals
.
fs
.
path
.
relative
(
newSettingsFile
.
path
);
final
Status
status
=
globals
.
logger
.
startProgress
(
'✏️ Creating `
$newSettingsRelativeFile
`...'
);
final
Status
status
=
logger
.
startProgress
(
'✏️ Creating `
$newSettingsRelativeFile
`...'
);
final
String
flutterRoot
=
globals
.
fs
.
path
.
absolute
(
Cache
.
flutterRoot
);
final
String
flutterRoot
=
globals
.
fs
.
path
.
absolute
(
Cache
.
flutterRoot
);
final
File
legacySettingsDotGradleFiles
=
globals
.
fs
.
file
(
globals
.
fs
.
path
.
join
(
flutterRoot
,
'packages'
,
'flutter_tools'
,
final
File
legacySettingsDotGradleFiles
=
globals
.
fs
.
file
(
globals
.
fs
.
path
.
join
(
flutterRoot
,
'packages'
,
'flutter_tools'
,
...
@@ -191,20 +191,26 @@ void createSettingsAarGradle(Directory androidDirectory) {
...
@@ -191,20 +191,26 @@ void createSettingsAarGradle(Directory androidDirectory) {
}
}
if
(!
exactMatch
)
{
if
(!
exactMatch
)
{
status
.
cancel
();
status
.
cancel
();
globals
.
printStatus
(
'
$warningMark
Flutter tried to create the file `
$newSettingsRelativeFile
`, but failed.'
);
logger
.
printStatus
(
'
$warningMark
Flutter tried to create the file `
$newSettingsRelativeFile
`, but failed.'
);
// Print how to manually update the file.
// Print how to manually update the file.
globals
.
printStatus
(
globals
.
fs
.
file
(
globals
.
fs
.
path
.
join
(
flutterRoot
,
'packages'
,
'flutter_tools'
,
logger
.
printStatus
(
globals
.
fs
.
file
(
globals
.
fs
.
path
.
join
(
flutterRoot
,
'packages'
,
'flutter_tools'
,
'gradle'
,
'manual_migration_settings.gradle.md'
)).
readAsStringSync
());
'gradle'
,
'manual_migration_settings.gradle.md'
)).
readAsStringSync
());
throwToolExit
(
'Please create the file and run this command again.'
);
throwToolExit
(
'Please create the file and run this command again.'
);
}
}
// Copy the new file.
// Copy the new file.
newSettingsFile
.
writeAsStringSync
(
settingsAarContent
);
newSettingsFile
.
writeAsStringSync
(
settingsAarContent
);
status
.
stop
();
status
.
stop
();
globals
.
printStatus
(
'
$successMark
`
$newSettingsRelativeFile
` created successfully.'
);
logger
.
printStatus
(
'
$successMark
`
$newSettingsRelativeFile
` created successfully.'
);
}
}
/// An implementation of the [AndroidBuilder] that delegates to gradle.
/// An implementation of the [AndroidBuilder] that delegates to gradle.
class
AndroidGradleBuilder
implements
AndroidBuilder
{
class
AndroidGradleBuilder
implements
AndroidBuilder
{
AndroidGradleBuilder
({
@required
Logger
logger
,
})
:
_logger
=
logger
;
final
Logger
_logger
;
/// Builds the AAR and POM files for the current Flutter module or plugin.
/// Builds the AAR and POM files for the current Flutter module or plugin.
@override
@override
Future
<
void
>
buildAar
({
Future
<
void
>
buildAar
({
...
@@ -238,7 +244,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -238,7 +244,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
androidPackage:
project
.
manifest
.
androidPackage
,
androidPackage:
project
.
manifest
.
androidPackage
,
repoDirectory:
getRepoDirectory
(
outputDirectory
),
repoDirectory:
getRepoDirectory
(
outputDirectory
),
buildNumber:
buildNumber
,
buildNumber:
buildNumber
,
logger:
globals
.
logger
,
logger:
_
logger
,
fileSystem:
globals
.
fs
,
fileSystem:
globals
.
fs
,
);
);
}
finally
{
}
finally
{
...
@@ -326,8 +332,8 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -326,8 +332,8 @@ class AndroidGradleBuilder implements AndroidBuilder {
BuildEvent
(
'app-using-android-x'
,
flutterUsage:
globals
.
flutterUsage
).
send
();
BuildEvent
(
'app-using-android-x'
,
flutterUsage:
globals
.
flutterUsage
).
send
();
}
else
if
(!
usesAndroidX
)
{
}
else
if
(!
usesAndroidX
)
{
BuildEvent
(
'app-not-using-android-x'
,
flutterUsage:
globals
.
flutterUsage
).
send
();
BuildEvent
(
'app-not-using-android-x'
,
flutterUsage:
globals
.
flutterUsage
).
send
();
globals
.
printStatus
(
"
$warningMark
Your app isn't using AndroidX."
,
emphasis:
true
);
_logger
.
printStatus
(
"
$warningMark
Your app isn't using AndroidX."
,
emphasis:
true
);
globals
.
printStatus
(
_logger
.
printStatus
(
'To avoid potential build failures, you can quickly migrate your app '
'To avoid potential build failures, you can quickly migrate your app '
'by following the steps on https://goo.gl/CP92wY .'
,
'by following the steps on https://goo.gl/CP92wY .'
,
indent:
4
,
indent:
4
,
...
@@ -339,7 +345,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -339,7 +345,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
if
(
shouldBuildPluginAsAar
)
{
if
(
shouldBuildPluginAsAar
)
{
// Create a settings.gradle that doesn't import the plugins as subprojects.
// Create a settings.gradle that doesn't import the plugins as subprojects.
createSettingsAarGradle
(
project
.
android
.
hostAppGradleRoot
);
createSettingsAarGradle
(
project
.
android
.
hostAppGradleRoot
,
_logger
);
await
buildPluginsAsAar
(
await
buildPluginsAsAar
(
project
,
project
,
androidBuildInfo
,
androidBuildInfo
,
...
@@ -352,7 +358,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -352,7 +358,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
?
getBundleTaskFor
(
buildInfo
)
?
getBundleTaskFor
(
buildInfo
)
:
getAssembleTaskFor
(
buildInfo
);
:
getAssembleTaskFor
(
buildInfo
);
final
Status
status
=
globals
.
logger
.
startProgress
(
final
Status
status
=
_
logger
.
startProgress
(
"Running Gradle task '
$assembleTask
'..."
,
"Running Gradle task '
$assembleTask
'..."
,
multilineOutput:
true
,
multilineOutput:
true
,
);
);
...
@@ -360,7 +366,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -360,7 +366,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
final
List
<
String
>
command
=
<
String
>[
final
List
<
String
>
command
=
<
String
>[
gradleUtils
.
getExecutable
(
project
),
gradleUtils
.
getExecutable
(
project
),
];
];
if
(
globals
.
logger
.
isVerbose
)
{
if
(
_
logger
.
isVerbose
)
{
command
.
add
(
'-Pverbose=true'
);
command
.
add
(
'-Pverbose=true'
);
}
else
{
}
else
{
command
.
add
(
'-q'
);
command
.
add
(
'-q'
);
...
@@ -374,7 +380,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -374,7 +380,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
engineOutPath:
localEngineArtifacts
.
engineOutPath
,
engineOutPath:
localEngineArtifacts
.
engineOutPath
,
androidBuildInfo:
androidBuildInfo
,
androidBuildInfo:
androidBuildInfo
,
);
);
globals
.
printTrace
(
_logger
.
printTrace
(
'Using local engine:
${localEngineArtifacts.engineOutPath}
\n
'
'Using local engine:
${localEngineArtifacts.engineOutPath}
\n
'
'Local Maven repo:
${localEngineRepo.path}
'
'Local Maven repo:
${localEngineRepo.path}
'
);
);
...
@@ -528,7 +534,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -528,7 +534,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
await
_performCodeSizeAnalysis
(
'aab'
,
bundleFile
,
androidBuildInfo
);
await
_performCodeSizeAnalysis
(
'aab'
,
bundleFile
,
androidBuildInfo
);
}
}
globals
.
printStatus
(
_logger
.
printStatus
(
'
$successMark
Built
${globals.fs.path.relative(bundleFile.path)}$appSize
.'
,
'
$successMark
Built
${globals.fs.path.relative(bundleFile.path)}$appSize
.'
,
color:
TerminalColor
.
green
,
color:
TerminalColor
.
green
,
);
);
...
@@ -552,7 +558,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -552,7 +558,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
apkFile
.
copySync
(
apkDirectory
apkFile
.
copySync
(
apkDirectory
.
childFile
(
'app.apk'
)
.
childFile
(
'app.apk'
)
.
path
);
.
path
);
globals
.
printTrace
(
'calculateSha:
$apkDirectory
/app.apk'
);
_logger
.
printTrace
(
'calculateSha:
$apkDirectory
/app.apk'
);
final
File
apkShaFile
=
apkDirectory
.
childFile
(
'app.apk.sha1'
);
final
File
apkShaFile
=
apkDirectory
.
childFile
(
'app.apk.sha1'
);
apkShaFile
.
writeAsStringSync
(
_calculateSha
(
apkFile
));
apkShaFile
.
writeAsStringSync
(
_calculateSha
(
apkFile
));
...
@@ -560,7 +566,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -560,7 +566,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
final
String
appSize
=
(
buildInfo
.
mode
==
BuildMode
.
debug
)
final
String
appSize
=
(
buildInfo
.
mode
==
BuildMode
.
debug
)
?
''
// Don't display the size when building a debug variant.
?
''
// Don't display the size when building a debug variant.
:
' (
${getSizeAsMB(apkFile.lengthSync())}
)'
;
:
' (
${getSizeAsMB(apkFile.lengthSync())}
)'
;
globals
.
printStatus
(
_logger
.
printStatus
(
'
$successMark
Built
${globals.fs.path.relative(apkFile.path)}$appSize
.'
,
'
$successMark
Built
${globals.fs.path.relative(apkFile.path)}$appSize
.'
,
color:
TerminalColor
.
green
,
color:
TerminalColor
.
green
,
);
);
...
@@ -575,7 +581,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -575,7 +581,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
AndroidBuildInfo
androidBuildInfo
,)
async
{
AndroidBuildInfo
androidBuildInfo
,)
async
{
final
SizeAnalyzer
sizeAnalyzer
=
SizeAnalyzer
(
final
SizeAnalyzer
sizeAnalyzer
=
SizeAnalyzer
(
fileSystem:
globals
.
fs
,
fileSystem:
globals
.
fs
,
logger:
globals
.
logger
,
logger:
_
logger
,
flutterUsage:
globals
.
flutterUsage
,
flutterUsage:
globals
.
flutterUsage
,
);
);
final
String
archName
=
getNameForAndroidArch
(
androidBuildInfo
.
targetArchs
.
single
);
final
String
archName
=
getNameForAndroidArch
(
androidBuildInfo
.
targetArchs
.
single
);
...
@@ -597,7 +603,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -597,7 +603,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
)
)
..
writeAsStringSync
(
jsonEncode
(
output
));
..
writeAsStringSync
(
jsonEncode
(
output
));
// This message is used as a sentinel in analyze_apk_size_test.dart
// This message is used as a sentinel in analyze_apk_size_test.dart
globals
.
printStatus
(
_logger
.
printStatus
(
'A summary of your
${kind.toUpperCase()}
analysis can be found at:
${outputFile.path}
'
,
'A summary of your
${kind.toUpperCase()}
analysis can be found at:
${outputFile.path}
'
,
);
);
...
@@ -606,7 +612,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -606,7 +612,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
.
split
(
'.flutter-devtools/'
)
.
split
(
'.flutter-devtools/'
)
.
last
.
last
.
trim
();
.
trim
();
globals
.
printStatus
(
_logger
.
printStatus
(
'
\n
To analyze your app size in Dart DevTools, run the following command:
\n
'
'
\n
To analyze your app size in Dart DevTools, run the following command:
\n
'
'flutter pub global activate devtools; flutter pub global run devtools '
'flutter pub global activate devtools; flutter pub global run devtools '
'--appSizeBase=
$relativeAppSizePath
'
'--appSizeBase=
$relativeAppSizePath
'
...
@@ -639,7 +645,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -639,7 +645,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
final
BuildInfo
buildInfo
=
androidBuildInfo
.
buildInfo
;
final
BuildInfo
buildInfo
=
androidBuildInfo
.
buildInfo
;
final
String
aarTask
=
getAarTaskFor
(
buildInfo
);
final
String
aarTask
=
getAarTaskFor
(
buildInfo
);
final
Status
status
=
globals
.
logger
.
startProgress
(
final
Status
status
=
_
logger
.
startProgress
(
"Running Gradle task '
$aarTask
'..."
,
"Running Gradle task '
$aarTask
'..."
,
multilineOutput:
true
,
multilineOutput:
true
,
);
);
...
@@ -660,7 +666,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -660,7 +666,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
'-Pis-plugin=
${manifest.isPlugin}
'
,
'-Pis-plugin=
${manifest.isPlugin}
'
,
'-PbuildNumber=
$buildNumber
'
'-PbuildNumber=
$buildNumber
'
];
];
if
(
globals
.
logger
.
isVerbose
)
{
if
(
_
logger
.
isVerbose
)
{
command
.
add
(
'-Pverbose=true'
);
command
.
add
(
'-Pverbose=true'
);
}
else
{
}
else
{
command
.
add
(
'-q'
);
command
.
add
(
'-q'
);
...
@@ -674,7 +680,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -674,7 +680,7 @@ class AndroidGradleBuilder implements AndroidBuilder {
}
}
command
.
addAll
(
androidBuildInfo
.
buildInfo
.
toGradleConfig
());
command
.
addAll
(
androidBuildInfo
.
buildInfo
.
toGradleConfig
());
if
(
buildInfo
.
dartObfuscation
&&
buildInfo
.
mode
!=
BuildMode
.
release
)
{
if
(
buildInfo
.
dartObfuscation
&&
buildInfo
.
mode
!=
BuildMode
.
release
)
{
globals
.
printStatus
(
_logger
.
printStatus
(
'Dart obfuscation is not supported in
${toTitleCase(buildInfo.friendlyModeName)}
'
'Dart obfuscation is not supported in
${toTitleCase(buildInfo.friendlyModeName)}
'
' mode, building as un-obfuscated.'
,
' mode, building as un-obfuscated.'
,
);
);
...
@@ -686,9 +692,9 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -686,9 +692,9 @@ class AndroidGradleBuilder implements AndroidBuilder {
engineOutPath:
localEngineArtifacts
.
engineOutPath
,
engineOutPath:
localEngineArtifacts
.
engineOutPath
,
androidBuildInfo:
androidBuildInfo
,
androidBuildInfo:
androidBuildInfo
,
);
);
globals
.
printTrace
(
_logger
.
printTrace
(
'Using local engine:
${localEngineArtifacts.engineOutPath}
\n
'
'Using local engine:
${localEngineArtifacts.engineOutPath}
\n
'
'Local Maven repo:
${localEngineRepo.path}
'
'Local Maven repo:
${localEngineRepo.path}
'
);
);
command
.
add
(
'-Plocal-engine-repo=
${localEngineRepo.path}
'
);
command
.
add
(
'-Plocal-engine-repo=
${localEngineRepo.path}
'
);
command
.
add
(
'-Plocal-engine-build-mode=
${buildInfo.modeName}
'
);
command
.
add
(
'-Plocal-engine-build-mode=
${buildInfo.modeName}
'
);
...
@@ -732,8 +738,8 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -732,8 +738,8 @@ class AndroidGradleBuilder implements AndroidBuilder {
globals
.
flutterUsage
.
sendTiming
(
'build'
,
'gradle-aar'
,
sw
.
elapsed
);
globals
.
flutterUsage
.
sendTiming
(
'build'
,
'gradle-aar'
,
sw
.
elapsed
);
if
(
result
.
exitCode
!=
0
)
{
if
(
result
.
exitCode
!=
0
)
{
globals
.
printStatus
(
result
.
stdout
,
wrap:
false
);
_logger
.
printStatus
(
result
.
stdout
,
wrap:
false
);
globals
.
printError
(
result
.
stderr
,
wrap:
false
);
_logger
.
printError
(
result
.
stderr
,
wrap:
false
);
throwToolExit
(
throwToolExit
(
'Gradle task
$aarTask
failed with exit code
${result.exitCode}
.'
,
'Gradle task
$aarTask
failed with exit code
${result.exitCode}
.'
,
exitCode:
result
.
exitCode
,
exitCode:
result
.
exitCode
,
...
@@ -741,14 +747,14 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -741,14 +747,14 @@ class AndroidGradleBuilder implements AndroidBuilder {
}
}
final
Directory
repoDirectory
=
getRepoDirectory
(
outputDirectory
);
final
Directory
repoDirectory
=
getRepoDirectory
(
outputDirectory
);
if
(!
repoDirectory
.
existsSync
())
{
if
(!
repoDirectory
.
existsSync
())
{
globals
.
printStatus
(
result
.
stdout
,
wrap:
false
);
_logger
.
printStatus
(
result
.
stdout
,
wrap:
false
);
globals
.
printError
(
result
.
stderr
,
wrap:
false
);
_logger
.
printError
(
result
.
stderr
,
wrap:
false
);
throwToolExit
(
throwToolExit
(
'Gradle task
$aarTask
failed to produce
$repoDirectory
.'
,
'Gradle task
$aarTask
failed to produce
$repoDirectory
.'
,
exitCode:
exitCode
,
exitCode:
exitCode
,
);
);
}
}
globals
.
printStatus
(
_logger
.
printStatus
(
'
$successMark
Built
${globals.fs.path.relative(repoDirectory.path)}
.'
,
'
$successMark
Built
${globals.fs.path.relative(repoDirectory.path)}
.'
,
color:
TerminalColor
.
green
,
color:
TerminalColor
.
green
,
);
);
...
@@ -777,10 +783,10 @@ class AndroidGradleBuilder implements AndroidBuilder {
...
@@ -777,10 +783,10 @@ class AndroidGradleBuilder implements AndroidBuilder {
final
String
pluginName
=
pluginParts
.
first
;
final
String
pluginName
=
pluginParts
.
first
;
final
File
buildGradleFile
=
pluginDirectory
.
childDirectory
(
'android'
).
childFile
(
'build.gradle'
);
final
File
buildGradleFile
=
pluginDirectory
.
childDirectory
(
'android'
).
childFile
(
'build.gradle'
);
if
(!
buildGradleFile
.
existsSync
())
{
if
(!
buildGradleFile
.
existsSync
())
{
globals
.
printTrace
(
"Skipping plugin
$pluginName
since it doesn't have a android/build.gradle file"
);
_logger
.
printTrace
(
"Skipping plugin
$pluginName
since it doesn't have a android/build.gradle file"
);
continue
;
continue
;
}
}
globals
.
logger
.
printStatus
(
'Building plugin
$pluginName
...'
);
_
logger
.
printStatus
(
'Building plugin
$pluginName
...'
);
try
{
try
{
await
buildGradleAar
(
await
buildGradleAar
(
project:
FlutterProject
.
fromDirectory
(
pluginDirectory
),
project:
FlutterProject
.
fromDirectory
(
pluginDirectory
),
...
@@ -876,15 +882,8 @@ String _hex(List<int> bytes) {
...
@@ -876,15 +882,8 @@ String _hex(List<int> bytes) {
}
}
String
_calculateSha
(
File
file
)
{
String
_calculateSha
(
File
file
)
{
final
Stopwatch
sw
=
Stopwatch
()..
start
();
final
List
<
int
>
bytes
=
file
.
readAsBytesSync
();
final
List
<
int
>
bytes
=
file
.
readAsBytesSync
();
globals
.
printTrace
(
'calculateSha: reading file took
${sw.elapsedMilliseconds}
us'
);
return
_hex
(
sha1
.
convert
(
bytes
).
bytes
);
globals
.
flutterUsage
.
sendTiming
(
'build'
,
'apk-sha-read'
,
sw
.
elapsed
);
sw
.
reset
();
final
String
sha
=
_hex
(
sha1
.
convert
(
bytes
).
bytes
);
globals
.
printTrace
(
'calculateSha: computing sha took
${sw.elapsedMilliseconds}
us'
);
globals
.
flutterUsage
.
sendTiming
(
'build'
,
'apk-sha-calc'
,
sw
.
elapsed
);
return
sha
;
}
}
void
_exitWithUnsupportedProjectMessage
(
)
{
void
_exitWithUnsupportedProjectMessage
(
)
{
...
...
packages/flutter_tools/lib/src/application_package.dart
View file @
dce8f712
...
@@ -65,7 +65,7 @@ class ApplicationPackageFactory {
...
@@ -65,7 +65,7 @@ class ApplicationPackageFactory {
case
TargetPlatform
.
android_x64
:
case
TargetPlatform
.
android_x64
:
case
TargetPlatform
.
android_x86
:
case
TargetPlatform
.
android_x86
:
if
(
_androidSdk
?.
licensesAvailable
==
true
&&
_androidSdk
?.
latestVersion
==
null
)
{
if
(
_androidSdk
?.
licensesAvailable
==
true
&&
_androidSdk
?.
latestVersion
==
null
)
{
await
checkGradleDependencies
();
await
checkGradleDependencies
(
_logger
);
}
}
if
(
applicationBinary
==
null
)
{
if
(
applicationBinary
==
null
)
{
return
await
AndroidApk
.
fromAndroidProject
(
return
await
AndroidApk
.
fromAndroidProject
(
...
...
packages/flutter_tools/lib/src/base/logger.dart
View file @
dce8f712
...
@@ -413,7 +413,6 @@ class WindowsStdoutLogger extends StdoutLogger {
...
@@ -413,7 +413,6 @@ class WindowsStdoutLogger extends StdoutLogger {
@override
@override
void
writeToStdOut
(
String
message
)
{
void
writeToStdOut
(
String
message
)
{
// TODO(jcollins-g): wrong abstraction layer for this, move to [Stdio].
final
String
windowsMessage
=
_terminal
.
supportsEmoji
final
String
windowsMessage
=
_terminal
.
supportsEmoji
?
message
?
message
:
message
.
replaceAll
(
'🔥'
,
''
)
:
message
.
replaceAll
(
'🔥'
,
''
)
...
@@ -421,7 +420,8 @@ class WindowsStdoutLogger extends StdoutLogger {
...
@@ -421,7 +420,8 @@ class WindowsStdoutLogger extends StdoutLogger {
.
replaceAll
(
'✗'
,
'X'
)
.
replaceAll
(
'✗'
,
'X'
)
.
replaceAll
(
'✓'
,
'√'
)
.
replaceAll
(
'✓'
,
'√'
)
.
replaceAll
(
'🔨'
,
''
)
.
replaceAll
(
'🔨'
,
''
)
.
replaceAll
(
'💪'
,
''
);
.
replaceAll
(
'💪'
,
''
)
.
replaceAll
(
'✏️'
,
''
);
_stdio
.
stdoutWrite
(
windowsMessage
);
_stdio
.
stdoutWrite
(
windowsMessage
);
}
}
}
}
...
...
packages/flutter_tools/lib/src/base/terminal.dart
View file @
dce8f712
...
@@ -84,7 +84,7 @@ abstract class Terminal {
...
@@ -84,7 +84,7 @@ abstract class Terminal {
/// Create a new test [Terminal].
/// Create a new test [Terminal].
///
///
/// If not specified, [supportsColor] defaults to `false`.
/// If not specified, [supportsColor] defaults to `false`.
factory
Terminal
.
test
({
bool
supportsColor
})
=
_TestTerminal
;
factory
Terminal
.
test
({
bool
supportsColor
,
bool
supportsEmoji
})
=
_TestTerminal
;
/// Whether the current terminal supports color escape codes.
/// Whether the current terminal supports color escape codes.
bool
get
supportsColor
;
bool
get
supportsColor
;
...
@@ -317,7 +317,7 @@ class AnsiTerminal implements Terminal {
...
@@ -317,7 +317,7 @@ class AnsiTerminal implements Terminal {
}
}
class
_TestTerminal
implements
Terminal
{
class
_TestTerminal
implements
Terminal
{
_TestTerminal
({
this
.
supportsColor
=
false
});
_TestTerminal
({
this
.
supportsColor
=
false
,
this
.
supportsEmoji
=
false
});
@override
@override
bool
usesTerminalUi
;
bool
usesTerminalUi
;
...
@@ -351,7 +351,7 @@ class _TestTerminal implements Terminal {
...
@@ -351,7 +351,7 @@ class _TestTerminal implements Terminal {
final
bool
supportsColor
;
final
bool
supportsColor
;
@override
@override
bool
get
supportsEmoji
=>
false
;
final
bool
supportsEmoji
;
@override
@override
bool
get
stdinHasTerminal
=>
false
;
bool
get
stdinHasTerminal
=>
false
;
...
...
packages/flutter_tools/lib/src/context_runner.dart
View file @
dce8f712
...
@@ -79,7 +79,9 @@ Future<T> runInContext<T>(
...
@@ -79,7 +79,9 @@ Future<T> runInContext<T>(
body:
runnerWrapper
,
body:
runnerWrapper
,
overrides:
overrides
,
overrides:
overrides
,
fallbacks:
<
Type
,
Generator
>{
fallbacks:
<
Type
,
Generator
>{
AndroidBuilder:
()
=>
AndroidGradleBuilder
(),
AndroidBuilder:
()
=>
AndroidGradleBuilder
(
logger:
globals
.
logger
,
),
AndroidLicenseValidator:
()
=>
AndroidLicenseValidator
(
AndroidLicenseValidator:
()
=>
AndroidLicenseValidator
(
operatingSystemUtils:
globals
.
os
,
operatingSystemUtils:
globals
.
os
,
platform:
globals
.
platform
,
platform:
globals
.
platform
,
...
...
packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart
View file @
dce8f712
...
@@ -14,6 +14,7 @@ import 'package:flutter_tools/src/artifacts.dart';
...
@@ -14,6 +14,7 @@ import 'package:flutter_tools/src/artifacts.dart';
import
'package:flutter_tools/src/base/context.dart'
;
import
'package:flutter_tools/src/base/context.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/base/io.dart'
;
import
'package:flutter_tools/src/base/io.dart'
;
import
'package:flutter_tools/src/base/logger.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:flutter_tools/src/build_info.dart'
;
import
'package:flutter_tools/src/build_info.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
...
@@ -29,6 +30,7 @@ import '../../src/mocks.dart';
...
@@ -29,6 +30,7 @@ import '../../src/mocks.dart';
void
main
(
)
{
void
main
(
)
{
group
(
'gradle build'
,
()
{
group
(
'gradle build'
,
()
{
BufferLogger
logger
;
TestUsage
testUsage
;
TestUsage
testUsage
;
MockAndroidSdk
mockAndroidSdk
;
MockAndroidSdk
mockAndroidSdk
;
MockAndroidStudio
mockAndroidStudio
;
MockAndroidStudio
mockAndroidStudio
;
...
@@ -41,6 +43,7 @@ void main() {
...
@@ -41,6 +43,7 @@ void main() {
AndroidGradleBuilder
builder
;
AndroidGradleBuilder
builder
;
setUp
(()
{
setUp
(()
{
logger
=
BufferLogger
.
test
();
testUsage
=
TestUsage
();
testUsage
=
TestUsage
();
fileSystem
=
MemoryFileSystem
.
test
();
fileSystem
=
MemoryFileSystem
.
test
();
fileSystemUtils
=
MockFileSystemUtils
();
fileSystemUtils
=
MockFileSystemUtils
();
...
@@ -49,7 +52,9 @@ void main() {
...
@@ -49,7 +52,9 @@ void main() {
mockArtifacts
=
MockLocalEngineArtifacts
();
mockArtifacts
=
MockLocalEngineArtifacts
();
mockProcessManager
=
MockProcessManager
();
mockProcessManager
=
MockProcessManager
();
android
=
fakePlatform
(
'android'
);
android
=
fakePlatform
(
'android'
);
builder
=
AndroidGradleBuilder
();
builder
=
AndroidGradleBuilder
(
logger:
logger
,
);
when
(
mockAndroidSdk
.
directory
).
thenReturn
(
'irrelevant'
);
when
(
mockAndroidSdk
.
directory
).
thenReturn
(
'irrelevant'
);
...
@@ -660,7 +665,7 @@ void main() {
...
@@ -660,7 +665,7 @@ void main() {
);
);
expect
(
expect
(
testL
ogger
.
statusText
,
l
ogger
.
statusText
,
contains
(
'Built build/app/outputs/flutter-apk/app-release.apk (0.0MB)'
),
contains
(
'Built build/app/outputs/flutter-apk/app-release.apk (0.0MB)'
),
);
);
...
@@ -708,11 +713,11 @@ void main() {
...
@@ -708,11 +713,11 @@ void main() {
);
);
expect
(
expect
(
testL
ogger
.
statusText
,
l
ogger
.
statusText
,
contains
(
'Built build/outputs/repo'
),
contains
(
'Built build/outputs/repo'
),
);
);
expect
(
expect
(
testL
ogger
.
statusText
.
contains
(
'Consuming the Module'
),
l
ogger
.
statusText
.
contains
(
'Consuming the Module'
),
isFalse
,
isFalse
,
);
);
...
...
packages/flutter_tools/test/general.shard/android/gradle_test.dart
View file @
dce8f712
...
@@ -462,7 +462,7 @@ include ':app'
...
@@ -462,7 +462,7 @@ include ':app'
globals
.
fs
.
file
(
globals
.
fs
.
path
.
join
(
toolGradlePath
,
'settings_aar.gradle.tmpl'
))
globals
.
fs
.
file
(
globals
.
fs
.
path
.
join
(
toolGradlePath
,
'settings_aar.gradle.tmpl'
))
.
writeAsStringSync
(
settingsAarFile
);
.
writeAsStringSync
(
settingsAarFile
);
createSettingsAarGradle
(
tempDir
);
createSettingsAarGradle
(
tempDir
,
testLogger
);
expect
(
testLogger
.
statusText
,
contains
(
'created successfully'
));
expect
(
testLogger
.
statusText
,
contains
(
'created successfully'
));
expect
(
tempDir
.
childFile
(
'settings_aar.gradle'
).
existsSync
(),
isTrue
);
expect
(
tempDir
.
childFile
(
'settings_aar.gradle'
).
existsSync
(),
isTrue
);
...
@@ -495,7 +495,7 @@ include ':app'
...
@@ -495,7 +495,7 @@ include ':app'
globals
.
fs
.
file
(
globals
.
fs
.
path
.
join
(
toolGradlePath
,
'settings_aar.gradle.tmpl'
))
globals
.
fs
.
file
(
globals
.
fs
.
path
.
join
(
toolGradlePath
,
'settings_aar.gradle.tmpl'
))
.
writeAsStringSync
(
settingsAarFile
);
.
writeAsStringSync
(
settingsAarFile
);
createSettingsAarGradle
(
tempDir
);
createSettingsAarGradle
(
tempDir
,
testLogger
);
expect
(
testLogger
.
statusText
,
contains
(
'created successfully'
));
expect
(
testLogger
.
statusText
,
contains
(
'created successfully'
));
expect
(
tempDir
.
childFile
(
'settings_aar.gradle'
).
existsSync
(),
isTrue
);
expect
(
tempDir
.
childFile
(
'settings_aar.gradle'
).
existsSync
(),
isTrue
);
...
@@ -834,13 +834,15 @@ flutter:
...
@@ -834,13 +834,15 @@ flutter:
FakeProcessManager
fakeProcessManager
;
FakeProcessManager
fakeProcessManager
;
MockAndroidSdk
mockAndroidSdk
;
MockAndroidSdk
mockAndroidSdk
;
AndroidGradleBuilder
builder
;
AndroidGradleBuilder
builder
;
BufferLogger
logger
;
setUp
(()
{
setUp
(()
{
logger
=
BufferLogger
.
test
();
fs
=
MemoryFileSystem
.
test
();
fs
=
MemoryFileSystem
.
test
();
fakeProcessManager
=
FakeProcessManager
.
list
(<
FakeCommand
>[]);
fakeProcessManager
=
FakeProcessManager
.
list
(<
FakeCommand
>[]);
mockAndroidSdk
=
MockAndroidSdk
();
mockAndroidSdk
=
MockAndroidSdk
();
when
(
mockAndroidSdk
.
directory
).
thenReturn
(
'irrelevant'
);
when
(
mockAndroidSdk
.
directory
).
thenReturn
(
'irrelevant'
);
builder
=
AndroidGradleBuilder
();
builder
=
AndroidGradleBuilder
(
logger:
logger
);
});
});
testUsingContext
(
'calls gradle'
,
()
async
{
testUsingContext
(
'calls gradle'
,
()
async
{
...
...
packages/flutter_tools/test/general.shard/base/logger_test.dart
View file @
dce8f712
...
@@ -87,6 +87,32 @@ void main() {
...
@@ -87,6 +87,32 @@ void main() {
),
isA
<
AppRunLogger
>());
),
isA
<
AppRunLogger
>());
});
});
testWithoutContext
(
'WindowsStdoutLogger rewrites emojis when terminal does not support emoji'
,
()
{
final
FakeStdio
stdio
=
FakeStdio
();
final
WindowsStdoutLogger
logger
=
WindowsStdoutLogger
(
outputPreferences:
OutputPreferences
.
test
(),
stdio:
stdio
,
terminal:
Terminal
.
test
(
supportsColor:
false
,
supportsEmoji:
false
),
);
logger
.
printStatus
(
'🔥🖼️✗✓🔨💪✏️'
);
expect
(
stdio
.
writtenToStdout
,
<
String
>[
'X√
\n
'
]);
});
testWithoutContext
(
'WindowsStdoutLogger does not rewrite emojis when terminal does support emoji'
,
()
{
final
FakeStdio
stdio
=
FakeStdio
();
final
WindowsStdoutLogger
logger
=
WindowsStdoutLogger
(
outputPreferences:
OutputPreferences
.
test
(),
stdio:
stdio
,
terminal:
Terminal
.
test
(
supportsColor:
true
,
supportsEmoji:
true
),
);
logger
.
printStatus
(
'🔥🖼️✗✓🔨💪✏️'
);
expect
(
stdio
.
writtenToStdout
,
<
String
>[
'🔥🖼️✗✓🔨💪✏️
\n
'
]);
});
testWithoutContext
(
'DelegatingLogger delegates'
,
()
{
testWithoutContext
(
'DelegatingLogger delegates'
,
()
{
final
FakeLogger
fakeLogger
=
FakeLogger
();
final
FakeLogger
fakeLogger
=
FakeLogger
();
final
DelegatingLogger
delegatingLogger
=
DelegatingLogger
(
fakeLogger
);
final
DelegatingLogger
delegatingLogger
=
DelegatingLogger
(
fakeLogger
);
...
...
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