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
d5149d44
Unverified
Commit
d5149d44
authored
Feb 01, 2018
by
Jason Simmons
Committed by
GitHub
Feb 01, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Toolchain support for Android ARM64 targets (#14394)
parent
26102c91
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
82 additions
and
14 deletions
+82
-14
flutter.gradle
packages/flutter_tools/gradle/flutter.gradle
+19
-3
android_device.dart
packages/flutter_tools/lib/src/android/android_device.dart
+12
-2
gradle.dart
packages/flutter_tools/lib/src/android/gradle.dart
+2
-0
application_package.dart
packages/flutter_tools/lib/src/application_package.dart
+2
-0
artifacts.dart
packages/flutter_tools/lib/src/artifacts.dart
+2
-0
build_info.dart
packages/flutter_tools/lib/src/build_info.dart
+19
-1
cache.dart
packages/flutter_tools/lib/src/cache.dart
+5
-0
build_aot.dart
packages/flutter_tools/lib/src/commands/build_aot.dart
+12
-6
build_apk.dart
packages/flutter_tools/lib/src/commands/build_apk.dart
+4
-1
resident_runner.dart
packages/flutter_tools/lib/src/resident_runner.dart
+1
-0
flutter_command.dart
packages/flutter_tools/lib/src/runner/flutter_command.dart
+4
-1
No files found.
packages/flutter_tools/gradle/flutter.gradle
View file @
d5149d44
...
...
@@ -115,9 +115,14 @@ class FlutterPlugin implements Plugin<Project> {
}
}
else
{
Path
baseEnginePath
=
Paths
.
get
(
flutterRoot
.
absolutePath
,
"bin"
,
"cache"
,
"artifacts"
,
"engine"
)
debugFlutterJar
=
baseEnginePath
.
resolve
(
"android-arm"
).
resolve
(
"flutter.jar"
).
toFile
()
profileFlutterJar
=
baseEnginePath
.
resolve
(
"android-arm-profile"
).
resolve
(
"flutter.jar"
).
toFile
()
releaseFlutterJar
=
baseEnginePath
.
resolve
(
"android-arm-release"
).
resolve
(
"flutter.jar"
).
toFile
()
String
targetArch
=
'arm'
if
(
project
.
hasProperty
(
'target-platform'
)
&&
project
.
property
(
'target-platform'
)
==
'android-arm64'
)
{
targetArch
=
'arm64'
}
debugFlutterJar
=
baseEnginePath
.
resolve
(
"android-${targetArch}"
).
resolve
(
"flutter.jar"
).
toFile
()
profileFlutterJar
=
baseEnginePath
.
resolve
(
"android-${targetArch}-profile"
).
resolve
(
"flutter.jar"
).
toFile
()
releaseFlutterJar
=
baseEnginePath
.
resolve
(
"android-${targetArch}-release"
).
resolve
(
"flutter.jar"
).
toFile
()
if
(!
debugFlutterJar
.
isFile
())
{
project
.
exec
{
executable
flutterExecutable
.
absolutePath
...
...
@@ -273,6 +278,10 @@ class FlutterPlugin implements Plugin<Project> {
if
(
project
.
hasProperty
(
'prefer-shared-library'
))
{
preferSharedLibraryValue
=
project
.
property
(
'prefer-shared-library'
)
}
String
targetPlatformValue
=
null
if
(
project
.
hasProperty
(
'target-platform'
))
{
targetPlatformValue
=
project
.
property
(
'target-platform'
)
}
project
.
android
.
applicationVariants
.
all
{
variant
->
String
flutterBuildMode
=
buildModeFor
(
variant
.
buildType
)
...
...
@@ -297,6 +306,7 @@ class FlutterPlugin implements Plugin<Project> {
previewDart2
previewDart2Value
strongMode
strongModeValue
preferSharedLibrary
preferSharedLibraryValue
targetPlatform
targetPlatformValue
sourceDir
project
.
file
(
project
.
flutter
.
source
)
intermediateDir
project
.
file
(
"${project.buildDir}/${AndroidProject.FD_INTERMEDIATES}/flutter/${variant.name}"
)
}
...
...
@@ -312,6 +322,7 @@ class FlutterPlugin implements Plugin<Project> {
previewDart2
previewDart2Value
strongMode
strongModeValue
preferSharedLibrary
preferSharedLibraryValue
targetPlatform
targetPlatformValue
sourceDir
project
.
file
(
project
.
flutter
.
source
)
intermediateDir
project
.
file
(
"${project.buildDir}/${AndroidProject.FD_INTERMEDIATES}/flutter/${variant.name}"
)
extraFrontEndOptions
extraFrontEndOptionsValue
...
...
@@ -349,6 +360,8 @@ abstract class BaseFlutterTask extends DefaultTask {
Boolean
strongMode
@Optional
@Input
Boolean
preferSharedLibrary
@Optional
@Input
String
targetPlatform
File
sourceDir
File
intermediateDir
@Optional
@Input
...
...
@@ -400,6 +413,9 @@ abstract class BaseFlutterTask extends DefaultTask {
if
(
preferSharedLibrary
)
{
args
"--prefer-shared-library"
}
if
(
targetPlatform
!=
null
)
{
args
"--target-platform"
,
"${targetPlatform}"
}
args
"--${buildMode}"
}
}
...
...
packages/flutter_tools/lib/src/android/android_device.dart
View file @
d5149d44
...
...
@@ -126,6 +126,9 @@ class AndroidDevice extends Device {
if
(
_platform
==
null
)
{
// http://developer.android.com/ndk/guides/abis.html (x86, armeabi-v7a, ...)
switch
(
await
_getProperty
(
'ro.product.cpu.abi'
))
{
case
'arm64-v8a'
:
_platform
=
TargetPlatform
.
android_arm64
;
break
;
case
'x86_64'
:
_platform
=
TargetPlatform
.
android_x64
;
break
;
...
...
@@ -355,16 +358,23 @@ class AndroidDevice extends Device {
if
(!
await
_checkForSupportedAdbVersion
()
||
!
await
_checkForSupportedAndroidVersion
())
return
new
LaunchResult
.
failed
();
if
(
await
targetPlatform
!=
TargetPlatform
.
android_arm
&&
!
debuggingOptions
.
buildInfo
.
isDebug
)
{
final
TargetPlatform
devicePlatform
=
await
targetPlatform
;
if
(!(
devicePlatform
==
TargetPlatform
.
android_arm
||
devicePlatform
==
TargetPlatform
.
android_arm64
)
&&
!
debuggingOptions
.
buildInfo
.
isDebug
)
{
printError
(
'Profile and release builds are only supported on ARM targets.'
);
return
new
LaunchResult
.
failed
();
}
BuildInfo
buildInfo
=
debuggingOptions
.
buildInfo
;
if
(
devicePlatform
==
TargetPlatform
.
android_arm64
)
buildInfo
=
buildInfo
.
withTargetPlatform
(
TargetPlatform
.
android_arm64
);
if
(!
prebuiltApplication
)
{
printTrace
(
'Building APK'
);
await
buildApk
(
target:
mainPath
,
buildInfo:
debuggingOptions
.
buildInfo
,
buildInfo:
buildInfo
,
);
// Package has been built, so we can get the updated application ID and
// activity name from the .apk.
...
...
packages/flutter_tools/lib/src/android/gradle.dart
View file @
d5149d44
...
...
@@ -301,6 +301,8 @@ Future<Null> _buildGradleProjectV2(String gradle, BuildInfo buildInfo, String ta
if
(
buildInfo
.
preferSharedLibrary
&&
androidSdk
.
ndkCompiler
!=
null
)
{
command
.
add
(
'-Pprefer-shared-library=true'
);
}
if
(
buildInfo
.
targetPlatform
==
TargetPlatform
.
android_arm64
)
command
.
add
(
'-Ptarget-platform=android-arm64'
);
command
.
add
(
assembleTask
);
final
int
exitCode
=
await
runCommandAndStreamOutput
(
...
...
packages/flutter_tools/lib/src/application_package.dart
View file @
d5149d44
...
...
@@ -259,6 +259,7 @@ Future<ApplicationPackage> getApplicationPackageForPlatform(TargetPlatform platf
})
async
{
switch
(
platform
)
{
case
TargetPlatform
.
android_arm
:
case
TargetPlatform
.
android_arm64
:
case
TargetPlatform
.
android_x64
:
case
TargetPlatform
.
android_x86
:
return
applicationBinary
==
null
...
...
@@ -287,6 +288,7 @@ class ApplicationPackageStore {
Future
<
ApplicationPackage
>
getPackageForPlatform
(
TargetPlatform
platform
)
async
{
switch
(
platform
)
{
case
TargetPlatform
.
android_arm
:
case
TargetPlatform
.
android_arm64
:
case
TargetPlatform
.
android_x64
:
case
TargetPlatform
.
android_x86
:
android
??=
await
AndroidApk
.
fromCurrentDirectory
();
...
...
packages/flutter_tools/lib/src/artifacts.dart
View file @
d5149d44
...
...
@@ -97,6 +97,7 @@ class CachedArtifacts extends Artifacts {
platform
??=
_currentHostPlatform
;
switch
(
platform
)
{
case
TargetPlatform
.
android_arm
:
case
TargetPlatform
.
android_arm64
:
case
TargetPlatform
.
android_x64
:
case
TargetPlatform
.
android_x86
:
return
_getAndroidArtifactPath
(
artifact
,
platform
,
mode
);
...
...
@@ -195,6 +196,7 @@ class CachedArtifacts extends Artifacts {
return
fs
.
path
.
join
(
engineDir
,
platformName
);
case
TargetPlatform
.
ios
:
case
TargetPlatform
.
android_arm
:
case
TargetPlatform
.
android_arm64
:
case
TargetPlatform
.
android_x64
:
case
TargetPlatform
.
android_x86
:
assert
(
mode
!=
null
,
'Need to specify a build mode for platform
$platform
.'
);
...
...
packages/flutter_tools/lib/src/build_info.dart
View file @
d5149d44
...
...
@@ -15,7 +15,8 @@ class BuildInfo {
this
.
strongMode
,
this
.
extraFrontEndOptions
,
this
.
extraGenSnapshotOptions
,
this
.
preferSharedLibrary
});
this
.
preferSharedLibrary
,
this
.
targetPlatform
});
final
BuildMode
mode
;
/// Represents a custom Android product flavor or an Xcode scheme, null for
...
...
@@ -41,6 +42,9 @@ class BuildInfo {
// Whether to prefer AOT compiling to a *so file.
final
bool
preferSharedLibrary
;
/// Target platform for the build (e.g. android_arm versus android_arm64).
final
TargetPlatform
targetPlatform
;
static
const
BuildInfo
debug
=
const
BuildInfo
(
BuildMode
.
debug
,
null
);
static
const
BuildInfo
profile
=
const
BuildInfo
(
BuildMode
.
profile
,
null
);
static
const
BuildInfo
release
=
const
BuildInfo
(
BuildMode
.
release
,
null
);
...
...
@@ -64,6 +68,15 @@ class BuildInfo {
bool
get
supportsEmulator
=>
isEmulatorBuildMode
(
mode
);
bool
get
supportsSimulator
=>
isEmulatorBuildMode
(
mode
);
String
get
modeName
=>
getModeName
(
mode
);
BuildInfo
withTargetPlatform
(
TargetPlatform
targetPlatform
)
=>
new
BuildInfo
(
mode
,
flavor
,
previewDart2:
previewDart2
,
strongMode:
strongMode
,
extraFrontEndOptions:
extraFrontEndOptions
,
extraGenSnapshotOptions:
extraGenSnapshotOptions
,
preferSharedLibrary:
preferSharedLibrary
,
targetPlatform:
targetPlatform
);
}
/// The type of build - `debug`, `profile`, or `release`.
...
...
@@ -114,6 +127,7 @@ String getNameForHostPlatform(HostPlatform platform) {
enum
TargetPlatform
{
android_arm
,
android_arm64
,
android_x64
,
android_x86
,
ios
,
...
...
@@ -127,6 +141,8 @@ String getNameForTargetPlatform(TargetPlatform platform) {
switch
(
platform
)
{
case
TargetPlatform
.
android_arm
:
return
'android-arm'
;
case
TargetPlatform
.
android_arm64
:
return
'android-arm64'
;
case
TargetPlatform
.
android_x64
:
return
'android-x64'
;
case
TargetPlatform
.
android_x86
:
...
...
@@ -150,6 +166,8 @@ TargetPlatform getTargetPlatformForName(String platform) {
switch
(
platform
)
{
case
'android-arm'
:
return
TargetPlatform
.
android_arm
;
case
'android-arm64'
:
return
TargetPlatform
.
android_arm64
;
case
'android-x64'
:
return
TargetPlatform
.
android_x64
;
case
'android-x86'
:
...
...
packages/flutter_tools/lib/src/cache.dart
View file @
d5149d44
...
...
@@ -394,6 +394,8 @@ class FlutterEngine extends CachedArtifact {
<
String
>[
'linux-x64'
,
'dart-sdk-linux-x64.zip'
],
<
String
>[
'android-arm-profile/linux-x64'
,
'android-arm-profile/linux-x64.zip'
],
<
String
>[
'android-arm-release/linux-x64'
,
'android-arm-release/linux-x64.zip'
],
<
String
>[
'android-arm64-profile/linux-x64'
,
'android-arm64-profile/linux-x64.zip'
],
<
String
>[
'android-arm64-release/linux-x64'
,
'android-arm64-release/linux-x64.zip'
],
];
List
<
List
<
String
>>
get
_windowsBinaryDirs
=>
<
List
<
String
>>[
...
...
@@ -409,6 +411,9 @@ class FlutterEngine extends CachedArtifact {
<
String
>[
'android-arm'
,
'android-arm/artifacts.zip'
],
<
String
>[
'android-arm-profile'
,
'android-arm-profile/artifacts.zip'
],
<
String
>[
'android-arm-release'
,
'android-arm-release/artifacts.zip'
],
<
String
>[
'android-arm64'
,
'android-arm64/artifacts.zip'
],
<
String
>[
'android-arm64-profile'
,
'android-arm64-profile/artifacts.zip'
],
<
String
>[
'android-arm64-release'
,
'android-arm64-release/artifacts.zip'
],
];
List
<
List
<
String
>>
get
_iosBinaryDirs
=>
<
List
<
String
>>[
...
...
packages/flutter_tools/lib/src/commands/build_aot.dart
View file @
d5149d44
...
...
@@ -35,7 +35,7 @@ class BuildAotCommand extends BuildSubCommand {
..
addOption
(
'output-dir'
,
defaultsTo:
getAotBuildDirectory
())
..
addOption
(
'target-platform'
,
defaultsTo:
'android-arm'
,
allowed:
<
String
>[
'android-arm'
,
'ios'
]
allowed:
<
String
>[
'android-arm'
,
'
android-arm64'
,
'
ios'
]
)
..
addFlag
(
'interpreter'
)
..
addFlag
(
'quiet'
,
defaultsTo:
false
)
...
...
@@ -159,7 +159,9 @@ Future<String> _buildAotSnapshot(
return
null
;
}
if
(
platform
!=
TargetPlatform
.
android_arm
&&
platform
!=
TargetPlatform
.
ios
)
{
if
(!(
platform
==
TargetPlatform
.
android_arm
||
platform
==
TargetPlatform
.
android_arm64
||
platform
==
TargetPlatform
.
ios
))
{
printError
(
'
${getNameForTargetPlatform(platform)}
does not support AOT compilation.'
);
return
null
;
}
...
...
@@ -217,6 +219,7 @@ Future<String> _buildAotSnapshot(
switch
(
platform
)
{
case
TargetPlatform
.
android_arm
:
case
TargetPlatform
.
android_arm64
:
case
TargetPlatform
.
android_x64
:
case
TargetPlatform
.
android_x86
:
if
(
compileToSharedLibrary
)
{
...
...
@@ -287,6 +290,7 @@ Future<String> _buildAotSnapshot(
switch
(
platform
)
{
case
TargetPlatform
.
android_arm
:
case
TargetPlatform
.
android_arm64
:
case
TargetPlatform
.
android_x64
:
case
TargetPlatform
.
android_x86
:
if
(
compileToSharedLibrary
)
{
...
...
@@ -300,10 +304,12 @@ Future<String> _buildAotSnapshot(
'--isolate_snapshot_instructions=
$isolateSnapshotInstructions
'
,
]);
}
if
(
platform
==
TargetPlatform
.
android_arm
)
{
genSnapshotCmd
.
addAll
(<
String
>[
'--no-sim-use-hardfp'
,
// Android uses the softfloat ABI.
'--no-use-integer-division'
,
// Not supported by the Pixel in 32-bit mode.
]);
}
break
;
case
TargetPlatform
.
ios
:
if
(
interpreter
)
{
...
...
packages/flutter_tools/lib/src/commands/build_apk.dart
View file @
d5149d44
...
...
@@ -18,7 +18,10 @@ class BuildApkCommand extends BuildSubCommand {
..
addFlag
(
'preview-dart-2'
,
negatable:
false
,
hide:
!
verboseHelp
)
..
addFlag
(
'strong'
,
negatable:
false
,
hide:
!
verboseHelp
)
..
addFlag
(
'prefer-shared-library'
,
negatable:
false
,
help:
'Whether to prefer compiling to a *.so file (android only).'
);
help:
'Whether to prefer compiling to a *.so file (android only).'
)
..
addOption
(
'target-platform'
,
defaultsTo:
'android-arm'
,
allowed:
<
String
>[
'android-arm'
,
'android-arm64'
]);
}
@override
...
...
packages/flutter_tools/lib/src/resident_runner.dart
View file @
d5149d44
...
...
@@ -886,6 +886,7 @@ String findMainDartFile([String target]) {
String
getMissingPackageHintForPlatform
(
TargetPlatform
platform
)
{
switch
(
platform
)
{
case
TargetPlatform
.
android_arm
:
case
TargetPlatform
.
android_arm64
:
case
TargetPlatform
.
android_x64
:
case
TargetPlatform
.
android_x86
:
String
manifest
=
'android/AndroidManifest.xml'
;
...
...
packages/flutter_tools/lib/src/runner/flutter_command.dart
View file @
d5149d44
...
...
@@ -185,7 +185,10 @@ abstract class FlutterCommand extends Command<Null> {
:
null
,
preferSharedLibrary:
argParser
.
options
.
containsKey
(
'prefer-shared-library'
)
?
argResults
[
'prefer-shared-library'
]
:
false
);
:
false
,
targetPlatform:
argParser
.
options
.
containsKey
(
'target-platform'
)
?
getTargetPlatformForName
(
argResults
[
'target-platform'
])
:
null
);
}
void
setupApplicationPackages
()
{
...
...
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