Skip to content

Commit d807ea8

Browse files
committed
test(android, lint): test java lint in CI
Java lint was not being checked anywhere, and the NewApi check in particular would have stopped a crash. Add full lint configuration tuned for current status Cannot enable it on the modules or our modules may fail library-consumer's builds, but we may configure it on the sub-modules from our test app then check that Tested and working and would have correctly failed the NewApi violation shown in #5206
1 parent 49c15f8 commit d807ea8

File tree

3 files changed

+366
-1
lines changed

3 files changed

+366
-1
lines changed

.github/workflows/tests_e2e.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ jobs:
103103
timeout_minutes: 15
104104
retry_wait_seconds: 60
105105
max_attempts: 3
106-
command: cd tests/android && ./gradlew assembleDebug assembleAndroidTest -DtestBuildType=debug -Dorg.gradle.daemon=false
106+
command: cd tests/android && ./gradlew assembleDebug assembleAndroidTest lintDebug -DtestBuildType=debug -Dorg.gradle.daemon=false
107107

108108
- name: Pre-fetch Javascript bundle
109109
# Prebuild the bundle so that's fast when the app starts.

tests/android/build.gradle

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,21 @@ subprojects {
8080
}
8181
}
8282
}
83+
if (project.name.contains('firebase')
84+
&& project.hasProperty('android')) {
85+
android {
86+
lintOptions {
87+
abortOnError = true
88+
warningsAsErrors false
89+
lintConfig file('./lint.xml')
90+
checkReleaseBuilds = true
91+
checkAllWarnings true
92+
showAll true
93+
textReport true
94+
textOutput 'stdout'
95+
htmlReport true
96+
}
97+
}
98+
}
8399
}
84100
}

tests/android/lint.xml

Lines changed: 349 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,349 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!-- INFORMATION ABOUT USAGE
3+
We use this file bacause we want to enable for the release build various checks from the
4+
Android SDK(initially just NewApi and InlinedApi) plus our own custom checks.
5+
6+
Using the check() method on lintOptions in the lint.gradle file would be nice but it
7+
doesn't work as it will NOT recognize any custom Lint checks(from a local module(like lint-rules)
8+
or from a library added as a dependency) .
9+
10+
To allow more checks for the release build you will need to modify this file to change the
11+
severity of that check to fatal. For example, to enable for release the WrongViewCast check
12+
change:
13+
14+
<issue id="WrongViewCast" severity="fatal" />
15+
16+
Also, note that any NEW issue will appear when linting as this is not an exclusive list of
17+
issues to use in linting, it's a file used to declare how the issues are applied to the project.
18+
If a NEW issue is created by the Android framework or added by other libraries which should be
19+
disabled for release then add it to this file like this:
20+
21+
<issue id="NewIssueId" severity="ignore"/>
22+
-->
23+
<lint>
24+
<issue id="NewApi" severity="fatal" />
25+
<issue id="HardcodedText" severity="fatal" />
26+
<issue id="InlinedApi" severity="fatal" />
27+
<issue id="StringFormatCount" severity="fatal" />
28+
<issue id="StringFormatMatches" severity="fatal" />
29+
<issue id="StringFormatInvalid" severity="fatal" />
30+
<issue id="UnusedResources" severity="fatal" />
31+
<issue id="ViewConstructor" severity="fatal" />
32+
<issue id="ViewHolder" severity="fatal" />
33+
<issue id="ViewTag" severity="fatal" />
34+
<issue id="WrongConstant" severity="fatal" />
35+
<issue id="WrongViewCast" severity="fatal" />
36+
37+
<!-- RTL Rules -->
38+
<issue id="RtlCompat" severity="fatal" />
39+
<issue id="RtlEnabled" severity="fatal" />
40+
<issue id="RtlHardcoded" severity="fatal" />
41+
<!-- RtlSymmetry is disabled because we already have RtlHardcoded rule enabled -->
42+
<issue id="RtlSymmetry" severity="ignore" />
43+
44+
<!-- <issue id="UseCompatTextViewDrawableXml" severity="ignore" /> -->
45+
<issue id="UnknownNullness" severity="ignore" />
46+
<issue id="SyntheticAccessor" severity="ignore" />
47+
<!-- FIXME need to remove WRITE_EXTERNAL_STORAGE from storage -->
48+
<issue id="ScopedStorage" severity="warning" />
49+
<issue id="AcceptsUserCertificates" severity="ignore" />
50+
<issue id="RedundantNamespace" severity="ignore" />
51+
<issue id="Autofill" severity="ignore" />
52+
<issue id="ContentDescription" severity="ignore" />
53+
<issue id="AddJavascriptInterface" severity="ignore" />
54+
<issue id="ShortAlarm" severity="ignore" />
55+
<issue id="AllCaps" severity="ignore" />
56+
<issue id="AllowAllHostnameVerifier" severity="ignore" />
57+
<issue id="AlwaysShowAction" severity="ignore" />
58+
<issue id="InvalidUsesTagAttribute" severity="ignore" />
59+
<issue id="MissingIntentFilterForMediaSearch" severity="ignore" />
60+
<issue id="MissingMediaBrowserServiceIntentFilter" severity="ignore" />
61+
<issue id="MissingOnPlayFromSearch" severity="ignore" />
62+
<issue id="ImpliedTouchscreenHardware" severity="ignore" />
63+
<issue id="MissingTvBanner" severity="ignore" />
64+
<issue id="MissingLeanbackLauncher" severity="ignore" />
65+
<issue id="MissingLeanbackSupport" severity="ignore" />
66+
<issue id="PermissionImpliesUnsupportedHardware" severity="ignore" />
67+
<issue id="UnsupportedTvHardware" severity="ignore" />
68+
<issue id="SupportAnnotationUsage" severity="ignore" />
69+
<issue id="ShiftFlags" severity="ignore" />
70+
<issue id="LocalSuppress" severity="ignore" />
71+
<issue id="SwitchIntDef" severity="ignore" />
72+
<issue id="UniqueConstants" severity="ignore" />
73+
<issue id="Override" severity="ignore" />
74+
<issue id="ObsoleteSdkInt" severity="ignore" />
75+
<issue id="UnusedAttribute" severity="ignore" />
76+
<issue id="AppCompatMethod" severity="ignore" />
77+
<issue id="AppCompatCustomView" severity="ignore" />
78+
<issue id="AppCompatResource" severity="ignore" />
79+
<issue id="GoogleAppIndexingApiWarning" severity="ignore" />
80+
<issue id="GoogleAppIndexingWarning" severity="ignore" />
81+
<issue id="AppLinksAutoVerifyError" severity="ignore" />
82+
<issue id="AppLinksAutoVerifyWarning" severity="ignore" />
83+
<issue id="AppLinkUrlError" severity="ignore" />
84+
<issue id="TestAppLink" severity="ignore" />
85+
<issue id="InconsistentArrays" severity="ignore" />
86+
<issue id="Assert" severity="ignore" />
87+
<issue id="BadHostnameVerifier" severity="ignore" />
88+
<issue id="BatteryLife" severity="ignore" />
89+
<issue id="BackButton" severity="ignore" />
90+
<issue id="ButtonCase" severity="ignore" />
91+
<issue id="ButtonOrder" severity="ignore" />
92+
<issue id="ButtonStyle" severity="ignore" />
93+
<issue id="ByteOrderMark" severity="ignore" />
94+
<issue id="MissingSuperCall" severity="ignore" />
95+
<issue id="AdapterViewChildren" severity="ignore" />
96+
<issue id="ScrollViewCount" severity="ignore" />
97+
<issue id="PermissionImpliesUnsupportedChromeOsHardware" severity="ignore" />
98+
<issue id="UnsupportedChromeOsHardware" severity="ignore" />
99+
<issue id="GetInstance" severity="ignore" />
100+
<issue id="CommitTransaction" severity="ignore" />
101+
<issue id="Recycle" severity="ignore" />
102+
<issue id="CommitPrefEdits" severity="ignore" />
103+
<issue id="ApplySharedPref" severity="ignore" />
104+
<issue id="ClickableViewAccessibility" severity="ignore" />
105+
<issue id="EasterEgg" severity="ignore" />
106+
<issue id="StopShip" severity="ignore" />
107+
<issue id="MissingConstraints" severity="ignore" />
108+
<issue id="VulnerableCordovaVersion" severity="ignore" />
109+
<issue id="CustomViewStyleable" severity="ignore" />
110+
<issue id="CutPasteId" severity="ignore" />
111+
<issue id="SimpleDateFormat" severity="ignore" />
112+
<issue id="SetTextI18n" severity="ignore" />
113+
<issue id="Deprecated" severity="ignore" />
114+
<issue id="MissingPrefix" severity="ignore" />
115+
<issue id="MangledCRLF" severity="ignore" />
116+
<issue id="DuplicateIncludedIds" severity="ignore" />
117+
<issue id="DuplicateIds" severity="ignore" />
118+
<issue id="DuplicateDefinition" severity="ignore" />
119+
<issue id="ReferenceType" severity="ignore" />
120+
<issue id="StringEscaping" severity="ignore" />
121+
<issue id="UnpackedNativeCode" severity="ignore" />
122+
<issue id="UnsafeDynamicallyLoadedCode" severity="ignore" />
123+
<issue id="UnsafeNativeCodeLocation" severity="ignore" />
124+
<issue id="EllipsizeMaxLines" severity="ignore" />
125+
<issue id="ExifInterface" severity="ignore" />
126+
<issue id="ExtraText" severity="ignore" />
127+
<issue id="FieldGetter" severity="ignore" />
128+
<issue id="InvalidAnalyticsName" severity="ignore" />
129+
<issue id="MissingFirebaseInstanceTokenRefresh" severity="ignore" />
130+
<issue id="FontValidationError" severity="ignore" />
131+
<issue id="FontValidationWarning" severity="ignore" />
132+
<issue id="FullBackupContent" severity="ignore" />
133+
<issue id="ValidFragment" severity="ignore" />
134+
<issue id="GetContentDescriptionOverride" severity="ignore" />
135+
<issue id="PackageManagerGetSignatures" severity="ignore" />
136+
<issue id="AccidentalOctal" severity="ignore" />
137+
<issue id="UseOfBundledGooglePlayServices" severity="ignore" />
138+
<issue id="GradleCompatible" severity="ignore" />
139+
<issue id="GradleDependency" severity="ignore" />
140+
<issue id="GradleDeprecated" severity="ignore" />
141+
<issue id="DevModeObsolete" severity="ignore" />
142+
<issue id="DuplicatePlatformClasses" severity="ignore" />
143+
<issue id="GradleGetter" severity="ignore" />
144+
<issue id="GradlePluginVersion" severity="ignore" />
145+
<issue id="HighAppVersionCode" severity="ignore" />
146+
<issue id="GradleIdeError" severity="ignore" />
147+
<issue id="GradlePath" severity="ignore" />
148+
<issue id="GradleDynamicVersion" severity="ignore" />
149+
<issue id="NotInterpolated" severity="ignore" />
150+
<issue id="StringShouldBeInt" severity="ignore" />
151+
<issue id="NewerVersionAvailable" severity="ignore" />
152+
<issue id="MinSdkTooLow" severity="ignore" />
153+
<issue id="GridLayout" severity="ignore" />
154+
<issue id="HandlerLeak" severity="ignore" />
155+
<issue id="HardcodedDebugMode" severity="ignore" />
156+
<issue id="HardwareIds" severity="ignore" />
157+
<issue id="IconDuplicatesConfig" severity="ignore" />
158+
<issue id="IconDuplicates" severity="ignore" />
159+
<issue id="GifUsage" severity="ignore" />
160+
<issue id="IconColors" severity="ignore" />
161+
<issue id="IconDensities" severity="ignore" />
162+
<issue id="IconDipSize" severity="ignore" />
163+
<issue id="IconExpectedSize" severity="ignore" />
164+
<issue id="IconExtension" severity="ignore" />
165+
<issue id="IconLauncherShape" severity="ignore" />
166+
<issue id="IconLocation" severity="ignore" />
167+
<issue id="IconMissingDensityFolder" severity="ignore" />
168+
<issue id="IconMixedNinePatch" severity="ignore" />
169+
<issue id="IconNoDpi" severity="ignore" />
170+
<issue id="IconXmlAndPng" severity="ignore" />
171+
<issue id="ConvertToWebp" severity="ignore" />
172+
<issue id="WebpUnsupported" severity="ignore" />
173+
<issue id="IncludeLayoutParam" severity="ignore" />
174+
<issue id="DisableBaselineAlignment" severity="ignore" />
175+
<issue id="InefficientWeight" severity="ignore" />
176+
<issue id="NestedWeights" severity="ignore" />
177+
<issue id="Orientation" severity="ignore" />
178+
<issue id="Suspicious0dp" severity="ignore" />
179+
<issue id="InstantApps" severity="ignore" />
180+
<issue id="DuplicateDivider" severity="ignore" />
181+
<issue id="TrustAllX509TrustManager" severity="ignore" />
182+
<issue id="InvalidImeActionId" severity="ignore" />
183+
<issue id="InvalidPackage" severity="ignore" />
184+
<issue id="DrawAllocation" severity="ignore" />
185+
<issue id="UseSparseArrays" severity="ignore" />
186+
<issue id="UseValueOf" severity="ignore" />
187+
<issue id="JavascriptInterface" severity="ignore" />
188+
<issue id="JobSchedulerService" severity="ignore" />
189+
<issue id="KeyboardInaccessibleWidget" severity="ignore" />
190+
<issue id="LabelFor" severity="ignore" />
191+
<issue id="InconsistentLayout" severity="ignore" />
192+
<issue id="InflateParams" severity="ignore" />
193+
<issue id="StaticFieldLeak" severity="ignore" />
194+
<issue id="DefaultLocale" severity="ignore" />
195+
<issue id="LocaleFolder" severity="ignore" />
196+
<issue id="GetLocales" severity="ignore" />
197+
<issue id="InvalidResourceFolder" severity="ignore" />
198+
<issue id="WrongRegion" severity="ignore" />
199+
<issue id="UseAlpha2" severity="ignore" />
200+
<issue id="LogConditional" severity="ignore" />
201+
<issue id="LongLogTag" severity="ignore" />
202+
<issue id="LogTagMismatch" severity="ignore" />
203+
<issue id="AllowBackup" severity="ignore" />
204+
<issue id="MissingApplicationIcon" severity="ignore" />
205+
<issue id="DeviceAdmin" severity="ignore" />
206+
<issue id="DuplicateActivity" severity="ignore" />
207+
<issue id="DuplicateUsesFeature" severity="ignore" />
208+
<issue id="GradleOverrides" severity="ignore" />
209+
<issue id="IllegalResourceRef" severity="ignore" />
210+
<issue id="MipmapIcons" severity="ignore" />
211+
<issue id="MockLocation" severity="ignore" />
212+
<issue id="MultipleUsesSdk" severity="ignore" />
213+
<issue id="ManifestOrder" severity="ignore" />
214+
<issue id="MissingVersion" severity="ignore" />
215+
<issue id="OldTargetApi" severity="ignore" />
216+
<issue id="UniquePermission" severity="ignore" />
217+
<issue id="UsesMinSdkAttributes" severity="ignore" />
218+
<issue id="WearableBindListener" severity="ignore" />
219+
<issue id="WrongManifestParent" severity="ignore" />
220+
<issue id="InvalidPermission" severity="ignore" />
221+
<issue id="ManifestResource" severity="ignore" />
222+
<issue id="ManifestTypo" severity="ignore" />
223+
<!-- <issue id="FloatMath" severity="ignore" /> -->
224+
<issue id="MergeMarker" severity="ignore" />
225+
<issue id="MergeRootFrame" severity="ignore" />
226+
<issue id="IncompatibleMediaBrowserServiceCompatVersion" severity="ignore" />
227+
<issue id="InnerclassSeparator" severity="ignore" />
228+
<issue id="Instantiatable" severity="ignore" />
229+
<!-- <issue id="MissingRegistered" severity="ignore" /> -->
230+
<issue id="MissingId" severity="ignore" />
231+
<issue id="LibraryCustomView" severity="ignore" />
232+
<issue id="ResAuto" severity="ignore" />
233+
<issue id="NamespaceTypo" severity="ignore" />
234+
<issue id="UnusedNamespace" severity="ignore" />
235+
<issue id="NegativeMargin" severity="ignore" />
236+
<issue id="NestedScrolling" severity="ignore" />
237+
<issue id="NetworkSecurityConfig" severity="ignore" />
238+
<issue id="MissingBackupPin" severity="ignore" />
239+
<issue id="PinSetExpiry" severity="ignore" />
240+
<issue id="NfcTechWhitespace" severity="ignore" />
241+
<issue id="UnlocalizedSms" severity="ignore" />
242+
<issue id="ObjectAnimatorBinding" severity="ignore" />
243+
<issue id="AnimatorKeep" severity="ignore" />
244+
<issue id="ObsoleteLayoutParam" severity="ignore" />
245+
<issue id="OnClick" severity="ignore" />
246+
<issue id="Overdraw" severity="ignore" />
247+
<issue id="DalvikOverride" severity="ignore" />
248+
<issue id="OverrideAbstract" severity="ignore" />
249+
<issue id="ParcelCreator" severity="ignore" />
250+
<issue id="UnusedQuantity" severity="ignore" />
251+
<issue id="MissingQuantity" severity="ignore" />
252+
<issue id="ImpliedQuantity" severity="ignore" />
253+
<issue id="ExportedPreferenceActivity" severity="ignore" />
254+
<issue id="PrivateApi" severity="ignore" />
255+
<issue id="PackagedPrivateKey" severity="ignore" />
256+
<issue id="PrivateResource" severity="ignore" />
257+
<issue id="ProguardSplit" severity="ignore" />
258+
<issue id="Proguard" severity="ignore" />
259+
<issue id="PropertyEscape" severity="ignore" />
260+
<issue id="UsingHttp" severity="ignore" />
261+
<issue id="SpUsage" severity="ignore" />
262+
<issue id="InOrMmUsage" severity="ignore" />
263+
<issue id="PxUsage" severity="ignore" />
264+
<issue id="SmallSp" severity="ignore" />
265+
<issue id="ParcelClassLoader" severity="ignore" />
266+
<issue id="PendingBindings" severity="ignore" />
267+
<issue id="RecyclerView" severity="ignore" />
268+
<issue id="Registered" severity="ignore" />
269+
<issue id="RelativeOverlap" severity="ignore" />
270+
<issue id="RequiredSize" severity="ignore" />
271+
<issue id="AaptCrash" severity="ignore" />
272+
<issue id="ResourceCycle" severity="ignore" />
273+
<issue id="ResourceName" severity="ignore" />
274+
<issue id="ValidRestrictions" severity="ignore" />
275+
<issue id="ScrollViewSize" severity="ignore" />
276+
<issue id="SdCardPath" severity="ignore" />
277+
<issue id="SecureRandom" severity="ignore" />
278+
<issue id="TrulyRandom" severity="ignore" />
279+
<issue id="ExportedContentProvider" severity="ignore" />
280+
<issue id="ExportedReceiver" severity="ignore" />
281+
<issue id="ExportedService" severity="ignore" />
282+
<issue id="SetWorldReadable" severity="ignore" />
283+
<issue id="SetWorldWritable" severity="ignore" />
284+
<issue id="GrantAllUris" severity="ignore" />
285+
<issue id="WorldReadableFiles" severity="ignore" />
286+
<issue id="WorldWriteableFiles" severity="ignore" />
287+
<issue id="ServiceCast" severity="ignore" />
288+
<issue id="WifiManagerLeak" severity="ignore" />
289+
<issue id="WifiManagerPotentialLeak" severity="ignore" />
290+
<issue id="SetJavaScriptEnabled" severity="ignore" />
291+
<issue id="SignatureOrSystemPermissions" severity="ignore" />
292+
<issue id="SQLiteString" severity="ignore" />
293+
<issue id="SSLCertificateSocketFactoryCreateSocket" severity="ignore" />
294+
<issue id="SSLCertificateSocketFactoryGetInsecure" severity="ignore" />
295+
<issue id="StateListReachable" severity="ignore" />
296+
<issue id="AuthLeak" severity="ignore" />
297+
<issue id="PluralsCandidate" severity="ignore" />
298+
<issue id="UseCheckPermission" severity="ignore" />
299+
<issue id="CheckResult" severity="ignore" />
300+
<issue id="ResourceAsColor" severity="ignore" />
301+
<issue id="MissingPermission" severity="ignore" />
302+
<issue id="Range" severity="ignore" />
303+
<issue id="ResourceType" severity="ignore" />
304+
<issue id="RestrictedApi" severity="ignore" />
305+
<issue id="WrongThread" severity="ignore" />
306+
<issue id="VisibleForTests" severity="ignore" />
307+
<issue id="ProtectedPermissions" severity="ignore" />
308+
<issue id="TextFields" severity="ignore" />
309+
<issue id="TextViewEdits" severity="ignore" />
310+
<issue id="SelectableText" severity="ignore" />
311+
<issue id="MenuTitle" severity="ignore" />
312+
<issue id="ShowToast" severity="ignore" />
313+
<issue id="TooDeepLayout" severity="ignore" />
314+
<issue id="TooManyViews" severity="ignore" />
315+
<issue id="ExtraTranslation" severity="ignore" />
316+
<issue id="MissingTranslation" severity="ignore" />
317+
<issue id="Typos" severity="ignore" />
318+
<issue id="TypographyDashes" severity="ignore" />
319+
<issue id="TypographyEllipsis" severity="ignore" />
320+
<issue id="TypographyFractions" severity="ignore" />
321+
<issue id="TypographyOther" severity="ignore" />
322+
<issue id="TypographyQuotes" severity="ignore" />
323+
<issue id="UnsafeProtectedBroadcastReceiver" severity="ignore" />
324+
<issue id="UnprotectedSMSBroadcastReceiver" severity="ignore" />
325+
<issue id="UnusedIds" severity="ignore" />
326+
<issue id="UseCompoundDrawables" severity="ignore" />
327+
<issue id="UselessLeaf" severity="ignore" />
328+
<issue id="UselessParent" severity="ignore" />
329+
<issue id="EnforceUTF8" severity="ignore" />
330+
<issue id="VectorRaster" severity="ignore" />
331+
<issue id="VectorDrawableCompat" severity="ignore" />
332+
<issue id="VectorPath" severity="ignore" />
333+
<issue id="InvalidVectorPath" severity="ignore" />
334+
<issue id="FindViewByIdCast" severity="ignore" />
335+
<issue id="Wakelock" severity="ignore" />
336+
<issue id="WakelockTimeout" severity="ignore" />
337+
<issue id="InvalidWearFeatureAttribute" severity="ignore" />
338+
<issue id="WearStandaloneAppFlag" severity="ignore" />
339+
<issue id="WebViewLayout" severity="ignore" />
340+
<issue id="WrongCall" severity="ignore" />
341+
<issue id="WrongCase" severity="ignore" />
342+
<issue id="InvalidId" severity="ignore" />
343+
<issue id="NotSibling" severity="ignore" />
344+
<issue id="UnknownId" severity="ignore" />
345+
<issue id="UnknownIdInLayout" severity="ignore" />
346+
<issue id="SuspiciousImport" severity="ignore" />
347+
<issue id="WrongFolder" severity="ignore" />
348+
<issue id="WrongThreadInterprocedural" severity="ignore" />
349+
</lint>

0 commit comments

Comments
 (0)