Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit a27da3e

Browse files
author
Emmanuel Garcia
authored
Use Android linter from cmdline-tools (#28153)
1 parent b13c765 commit a27da3e

File tree

6 files changed

+194
-221
lines changed

6 files changed

+194
-221
lines changed

DEPS

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,17 @@ deps = {
514514
'dep_type': 'cipd',
515515
},
516516

517+
'src/third_party/android_tools/sdk/cmdline-tools': {
518+
'packages': [
519+
{
520+
'package': 'flutter/android/sdk/cmdline-tools',
521+
'version': 'latest',
522+
}
523+
],
524+
'condition': 'download_android_deps',
525+
'dep_type': 'cipd',
526+
},
527+
517528
'src/third_party/android_tools/sdk/licenses': {
518529
'packages': [
519530
{

shell/platform/android/io/flutter/app/FlutterActivityDelegate.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
* The most obvious example of when this may come in handy is if an application wishes to subclass
4444
* the Android v4 support library's {@code FragmentActivity}.
4545
*
46-
* <p><b>Usage:</b></p>
46+
* <p><b>Usage:</b>
4747
*
4848
* <p>To wire this class up to your activity, simply forward the events defined in {@link
4949
* FlutterActivityEvents} from your activity to an instance of this class. Optionally, you can make
@@ -425,9 +425,7 @@ private Boolean showSplashScreenUntilFirstFrame() {
425425
ActivityInfo activityInfo =
426426
activity
427427
.getPackageManager()
428-
.getActivityInfo(
429-
activity.getComponentName(),
430-
PackageManager.GET_META_DATA | PackageManager.GET_ACTIVITIES);
428+
.getActivityInfo(activity.getComponentName(), PackageManager.GET_META_DATA);
431429
Bundle metadata = activityInfo.metaData;
432430
return metadata != null && metadata.getBoolean(SPLASH_SCREEN_META_DATA_KEY);
433431
} catch (NameNotFoundException e) {

shell/platform/android/io/flutter/embedding/android/FlutterImageView.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package io.flutter.embedding.android;
66

7+
import android.annotation.SuppressLint;
78
import android.annotation.TargetApi;
89
import android.content.Context;
910
import android.graphics.Bitmap;
@@ -99,6 +100,7 @@ private static void logW(String format, Object... args) {
99100
}
100101

101102
@TargetApi(19)
103+
@SuppressLint("WrongConstant") // RGBA_8888 is a valid constant.
102104
@NonNull
103105
private static ImageReader createImageReader(int width, int height) {
104106
if (width <= 0) {

shell/platform/android/test/io/flutter/embedding/android/FlutterActivityTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import static org.mockito.Mockito.when;
1616
import static org.robolectric.Shadows.shadowOf;
1717

18+
import android.annotation.SuppressLint;
1819
import android.annotation.TargetApi;
1920
import android.content.Context;
2021
import android.content.Intent;
@@ -438,6 +439,7 @@ public void itWithMetadataWithoutSplashScreenResourceKeyDoesNotProvideSplashScre
438439

439440
static class FlutterActivityWithProvidedEngine extends FlutterActivity {
440441
@Override
442+
@SuppressLint("MissingSuperCall")
441443
protected void onCreate(@Nullable Bundle savedInstanceState) {
442444
super.delegate = new FlutterActivityAndFragmentDelegate(this);
443445
super.delegate.setupFlutterEngine();

tools/android_lint/bin/main.dart

Lines changed: 12 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ const LocalProcessManager processManager = LocalProcessManager();
2727
/// Java 1.8.
2828
Future<void> main(List<String> args) async {
2929
final ArgParser argParser = setupOptions();
30-
await checkJava1_8();
3130
final int exitCode = await runLint(argParser, argParser.parse(args));
3231
exit(exitCode);
3332
}
@@ -74,7 +73,7 @@ Future<int> runLint(ArgParser argParser, ArgResults argResults) async {
7473
<!-- WILL AUTOMATICALLY FIND ALL .java FILES AND INCLUDE THEM HERE -->
7574
<project>
7675
<sdk dir="${androidSdkDir.path}" />
77-
<module name="FlutterEngine" android="true" library="true" compile-sdk-version="android-P">
76+
<module name="FlutterEngine" android="true" library="true" compile-sdk-version="android-S">
7877
<manifest file="${path.join(androidDir.path, 'AndroidManifest.xml')}" />
7978
''');
8079
for (final FileSystemEntity entity in androidDir.listSync(recursive: true)) {
@@ -89,12 +88,11 @@ Future<int> runLint(ArgParser argParser, ArgResults argResults) async {
8988
</project>
9089
''');
9190
await projectXml.close();
92-
9391
print('Wrote project.xml, starting lint...');
9492
final List<String> lintArgs = <String>[
95-
path.join(androidSdkDir.path, 'tools', 'bin', 'lint'),
96-
'--project',
97-
projectXmlPath,
93+
path.join(androidSdkDir.path, 'cmdline-tools', 'bin', 'lint'),
94+
'--project', projectXmlPath,
95+
'--compile-sdk-version', '31',
9896
'--showall',
9997
'--exitcode', // Set non-zero exit code on errors
10098
'-Wall',
@@ -106,14 +104,13 @@ Future<int> runLint(ArgParser argParser, ArgResults argResults) async {
106104
if (html) {
107105
lintArgs.addAll(<String>['--html', argResults['out'] as String]);
108106
}
109-
final String? javaHome = await getJavaHome();
107+
final String javahome = getJavaHome(inArgument);
108+
print('Using JAVA_HOME=$javahome');
110109
final Process lintProcess = await processManager.start(
111110
lintArgs,
112-
environment: javaHome != null
113-
? <String, String>{
114-
'JAVA_HOME': javaHome,
115-
}
116-
: null,
111+
environment: <String, String>{
112+
'JAVA_HOME': javahome,
113+
},
117114
);
118115
lintProcess.stdout.pipe(stdout);
119116
lintProcess.stderr.pipe(stderr);
@@ -166,50 +163,11 @@ ArgParser setupOptions() {
166163
return argParser;
167164
}
168165

169-
/// On macOS, we can try to find Java 1.8.
170-
///
171-
/// Otherwise, default to whatever JAVA_HOME is already.
172-
Future<String?> getJavaHome() async {
166+
String getJavaHome(String src) {
173167
if (Platform.isMacOS) {
174-
final ProcessResult result = await processManager.run(
175-
<String>['/usr/libexec/java_home', '-v', '1.8', '-F'],
176-
);
177-
if (result.exitCode == 0) {
178-
return (result.stdout as String).trim();
179-
}
180-
}
181-
return Platform.environment['JAVA_HOME'];
182-
}
183-
184-
/// Checks that `java` points to Java 1.8.
185-
///
186-
/// The SDK lint tool may not work with Java > 1.8.
187-
Future<void> checkJava1_8() async {
188-
print('Checking Java version...');
189-
190-
if (Platform.isMacOS) {
191-
final ProcessResult result = await processManager.run(
192-
<String>['/usr/libexec/java_home', '-v', '1.8', '-F'],
193-
);
194-
if (result.exitCode != 0) {
195-
print('Java 1.8 not available - the linter may not work properly.');
196-
}
197-
return;
198-
}
199-
final ProcessResult javaResult = await processManager.run(
200-
<String>['java', '-version'],
201-
);
202-
if (javaResult.exitCode != 0) {
203-
print('Could not run "java -version". '
204-
'Ensure Java is installed and available on your path.');
205-
print(javaResult.stderr);
206-
}
207-
// `java -version` writes to stderr.
208-
final String javaVersionStdout = javaResult.stderr as String;
209-
if (!javaVersionStdout.contains('"1.8')) {
210-
print('The Android SDK tools may not work properly with your Java version. '
211-
'If this process fails, please retry using Java 1.8.');
168+
return path.normalize('$src/third_party/java/openjdk/Contents/Home/');
212169
}
170+
return path.normalize('$src/third_party/java/openjdk/');
213171
}
214172

215173
/// The root directory of this project.

0 commit comments

Comments
 (0)