@dailephd/my-dev-kit-lab 0.3.4 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/README.md +12 -287
  2. package/dist/scripts/security/validate.js +210 -70
  3. package/dist/src/audits/codeRot/detectors/architectureDriftDetector.js +5 -2
  4. package/dist/src/audits/codeRot/detectors/securityValidationAssumptionRotDetector.js +5 -2
  5. package/dist/src/mobile/android/advancedSecurity/backupConfiguration/analyzeBackupConfiguration.js +300 -0
  6. package/dist/src/mobile/android/advancedSecurity/backupConfiguration/checkResult.js +41 -0
  7. package/dist/src/mobile/android/advancedSecurity/backupConfiguration/index.js +8 -0
  8. package/dist/src/mobile/android/advancedSecurity/backupConfiguration/manifestEvidence.js +102 -0
  9. package/dist/src/mobile/android/advancedSecurity/backupConfiguration/parseBackupRules.js +110 -0
  10. package/dist/src/mobile/android/advancedSecurity/backupConfiguration/types.js +27 -0
  11. package/dist/src/mobile/android/advancedSecurity/candidateEvidence.js +50 -0
  12. package/dist/src/mobile/android/advancedSecurity/clipboard/analyzeClipboardSecurity.js +166 -0
  13. package/dist/src/mobile/android/advancedSecurity/clipboard/checkResult.js +74 -0
  14. package/dist/src/mobile/android/advancedSecurity/clipboard/collectClipboardEvidence.js +82 -0
  15. package/dist/src/mobile/android/advancedSecurity/clipboard/index.js +1 -0
  16. package/dist/src/mobile/android/advancedSecurity/clipboard/types.js +1 -0
  17. package/dist/src/mobile/android/advancedSecurity/externalTools/androidLint/checkResult.js +255 -0
  18. package/dist/src/mobile/android/advancedSecurity/externalTools/androidLint/index.js +1 -0
  19. package/dist/src/mobile/android/advancedSecurity/externalTools/androidLint/parseLintSarif.js +37 -0
  20. package/dist/src/mobile/android/advancedSecurity/externalTools/androidLint/parseLintXml.js +36 -0
  21. package/dist/src/mobile/android/advancedSecurity/externalTools/artifacts.js +95 -0
  22. package/dist/src/mobile/android/advancedSecurity/externalTools/boundedOutput.js +33 -0
  23. package/dist/src/mobile/android/advancedSecurity/externalTools/dependencyCheck/checkResult.js +173 -0
  24. package/dist/src/mobile/android/advancedSecurity/externalTools/dependencyCheck/command.js +33 -0
  25. package/dist/src/mobile/android/advancedSecurity/externalTools/dependencyCheck/index.js +1 -0
  26. package/dist/src/mobile/android/advancedSecurity/externalTools/dependencyCheck/parseDependencyCheckJson.js +133 -0
  27. package/dist/src/mobile/android/advancedSecurity/externalTools/discoverExecutable.js +13 -0
  28. package/dist/src/mobile/android/advancedSecurity/externalTools/index.js +8 -0
  29. package/dist/src/mobile/android/advancedSecurity/externalTools/minimalEnvironment.js +26 -0
  30. package/dist/src/mobile/android/advancedSecurity/externalTools/mutation.js +77 -0
  31. package/dist/src/mobile/android/advancedSecurity/externalTools/osv/checkResult.js +161 -0
  32. package/dist/src/mobile/android/advancedSecurity/externalTools/osv/command.js +25 -0
  33. package/dist/src/mobile/android/advancedSecurity/externalTools/osv/index.js +1 -0
  34. package/dist/src/mobile/android/advancedSecurity/externalTools/osv/parseOsvJson.js +136 -0
  35. package/dist/src/mobile/android/advancedSecurity/externalTools/runBoundedExternalTool.js +51 -0
  36. package/dist/src/mobile/android/advancedSecurity/externalTools/runRequestedAndroidExternalTools.js +54 -0
  37. package/dist/src/mobile/android/advancedSecurity/externalTools/semgrep/checkResult.js +170 -0
  38. package/dist/src/mobile/android/advancedSecurity/externalTools/semgrep/command.js +28 -0
  39. package/dist/src/mobile/android/advancedSecurity/externalTools/semgrep/index.js +2 -0
  40. package/dist/src/mobile/android/advancedSecurity/externalTools/semgrep/parseSemgrepJson.js +141 -0
  41. package/dist/src/mobile/android/advancedSecurity/externalTools/semgrep/rules.js +105 -0
  42. package/dist/src/mobile/android/advancedSecurity/externalTools/types.js +107 -0
  43. package/dist/src/mobile/android/advancedSecurity/fileProvider/checkResult.js +188 -0
  44. package/dist/src/mobile/android/advancedSecurity/fileProvider/index.js +1 -0
  45. package/dist/src/mobile/android/advancedSecurity/firebaseGoogle/analyzeFirebaseGoogleServices.js +197 -0
  46. package/dist/src/mobile/android/advancedSecurity/firebaseGoogle/checkResult.js +77 -0
  47. package/dist/src/mobile/android/advancedSecurity/firebaseGoogle/collectFirebaseServiceEvidence.js +193 -0
  48. package/dist/src/mobile/android/advancedSecurity/firebaseGoogle/discoverFirebaseArtifacts.js +128 -0
  49. package/dist/src/mobile/android/advancedSecurity/firebaseGoogle/index.js +1 -0
  50. package/dist/src/mobile/android/advancedSecurity/firebaseGoogle/parseDatabaseRules.js +55 -0
  51. package/dist/src/mobile/android/advancedSecurity/firebaseGoogle/parseFirebaseConfig.js +75 -0
  52. package/dist/src/mobile/android/advancedSecurity/firebaseGoogle/parseFirestoreStorageRules.js +88 -0
  53. package/dist/src/mobile/android/advancedSecurity/firebaseGoogle/parseGoogleServicesConfig.js +55 -0
  54. package/dist/src/mobile/android/advancedSecurity/firebaseGoogle/types.js +6 -0
  55. package/dist/src/mobile/android/advancedSecurity/networkSecurity/analyzeNetworkSecurity.js +394 -0
  56. package/dist/src/mobile/android/advancedSecurity/networkSecurity/checkResult.js +47 -0
  57. package/dist/src/mobile/android/advancedSecurity/networkSecurity/deriveEffectiveNetworkPolicy.js +52 -0
  58. package/dist/src/mobile/android/advancedSecurity/networkSecurity/index.js +14 -0
  59. package/dist/src/mobile/android/advancedSecurity/networkSecurity/manifestEvidence.js +109 -0
  60. package/dist/src/mobile/android/advancedSecurity/networkSecurity/parseNetworkSecurityConfig.js +186 -0
  61. package/dist/src/mobile/android/advancedSecurity/networkSecurity/types.js +1 -0
  62. package/dist/src/mobile/android/advancedSecurity/ordering.js +44 -0
  63. package/dist/src/mobile/android/advancedSecurity/redaction.js +54 -0
  64. package/dist/src/mobile/android/advancedSecurity/releaseConfiguration/analyzeReleaseConfiguration.js +221 -0
  65. package/dist/src/mobile/android/advancedSecurity/releaseConfiguration/checkResult.js +39 -0
  66. package/dist/src/mobile/android/advancedSecurity/releaseConfiguration/index.js +7 -0
  67. package/dist/src/mobile/android/advancedSecurity/releaseConfiguration/manifestEvidence.js +19 -0
  68. package/dist/src/mobile/android/advancedSecurity/resourceReference.js +69 -0
  69. package/dist/src/mobile/android/advancedSecurity/resourceResolution.js +118 -0
  70. package/dist/src/mobile/android/advancedSecurity/ruleIds.js +141 -0
  71. package/dist/src/mobile/android/advancedSecurity/secretCandidates/analyzeSecretCandidates.js +116 -0
  72. package/dist/src/mobile/android/advancedSecurity/secretCandidates/checkResult.js +80 -0
  73. package/dist/src/mobile/android/advancedSecurity/secretCandidates/discoverSecretSourceFiles.js +152 -0
  74. package/dist/src/mobile/android/advancedSecurity/secretCandidates/index.js +9 -0
  75. package/dist/src/mobile/android/advancedSecurity/secretCandidates/matchSecretCandidates.js +136 -0
  76. package/dist/src/mobile/android/advancedSecurity/secretCandidates/suppressValue.js +61 -0
  77. package/dist/src/mobile/android/advancedSecurity/secretCandidates/types.js +11 -0
  78. package/dist/src/mobile/android/advancedSecurity/sensitiveCategories.js +34 -0
  79. package/dist/src/mobile/android/advancedSecurity/sensitiveData/classifyDirectExpression.js +99 -0
  80. package/dist/src/mobile/android/advancedSecurity/sensitiveData/classifySensitiveIdentifier.js +111 -0
  81. package/dist/src/mobile/android/advancedSecurity/sensitiveData/index.js +3 -0
  82. package/dist/src/mobile/android/advancedSecurity/sensitiveData/localSourceContext.js +90 -0
  83. package/dist/src/mobile/android/advancedSecurity/sensitiveData/splitArguments.js +59 -0
  84. package/dist/src/mobile/android/advancedSecurity/sensitiveLogging/analyzeSensitiveLogging.js +117 -0
  85. package/dist/src/mobile/android/advancedSecurity/sensitiveLogging/checkResult.js +74 -0
  86. package/dist/src/mobile/android/advancedSecurity/sensitiveLogging/collectLoggingEvidence.js +87 -0
  87. package/dist/src/mobile/android/advancedSecurity/sensitiveLogging/index.js +1 -0
  88. package/dist/src/mobile/android/advancedSecurity/sensitiveLogging/types.js +1 -0
  89. package/dist/src/mobile/android/advancedSecurity/sensitiveStorage/analyzeSensitiveStorage.js +182 -0
  90. package/dist/src/mobile/android/advancedSecurity/sensitiveStorage/checkResult.js +74 -0
  91. package/dist/src/mobile/android/advancedSecurity/sensitiveStorage/collectStorageEvidence.js +109 -0
  92. package/dist/src/mobile/android/advancedSecurity/sensitiveStorage/index.js +1 -0
  93. package/dist/src/mobile/android/advancedSecurity/sensitiveStorage/types.js +4 -0
  94. package/dist/src/mobile/android/advancedSecurity/signingConfiguration/analyzeSigningConfiguration.js +270 -0
  95. package/dist/src/mobile/android/advancedSecurity/signingConfiguration/checkResult.js +119 -0
  96. package/dist/src/mobile/android/advancedSecurity/signingConfiguration/discoverKeystoreCandidates.js +55 -0
  97. package/dist/src/mobile/android/advancedSecurity/signingConfiguration/extractSigningConfigurations.js +81 -0
  98. package/dist/src/mobile/android/advancedSecurity/signingConfiguration/index.js +8 -0
  99. package/dist/src/mobile/android/advancedSecurity/signingConfiguration/types.js +20 -0
  100. package/dist/src/mobile/android/advancedSecurity/sourceLocation.js +15 -0
  101. package/dist/src/mobile/android/advancedSecurity/webview/checkResult.js +210 -0
  102. package/dist/src/mobile/android/advancedSecurity/webview/index.js +1 -0
  103. package/dist/src/mobile/android/audit/androidFinding.js +68 -0
  104. package/dist/src/mobile/android/audit/checkResultBuilder.js +97 -0
  105. package/dist/src/mobile/android/audit/deepLinkAudit.js +183 -0
  106. package/dist/src/mobile/android/audit/exportedComponentAudit.js +183 -0
  107. package/dist/src/mobile/android/audit/intentFilterAudit.js +128 -0
  108. package/dist/src/mobile/android/audit/permissionAudit.js +142 -0
  109. package/dist/src/mobile/android/detect/androidTargetDetection.js +18 -0
  110. package/dist/src/mobile/android/detect/buildFileEvidence.js +36 -0
  111. package/dist/src/mobile/android/detect/classify.js +150 -0
  112. package/dist/src/mobile/android/detect/detectAndroidProject.js +252 -0
  113. package/dist/src/mobile/android/detect/settingsModules.js +60 -0
  114. package/dist/src/mobile/android/detect/sourceEvidence.js +92 -0
  115. package/dist/src/mobile/android/detect/traversal.js +79 -0
  116. package/dist/src/mobile/android/detect/versionCatalogEvidence.js +37 -0
  117. package/dist/src/mobile/android/detection.js +28 -0
  118. package/dist/src/mobile/android/gradle/gradleMetadataCheckResult.js +120 -0
  119. package/dist/src/mobile/android/gradle/moduleMetadataExtractor.js +243 -0
  120. package/dist/src/mobile/android/gradle/pluginVersionExtractor.js +40 -0
  121. package/dist/src/mobile/android/gradle/readAndroidGradleMetadata.js +210 -0
  122. package/dist/src/mobile/android/gradle/releaseMetadataSummary.js +64 -0
  123. package/dist/src/mobile/android/gradle/settingsMetadata.js +20 -0
  124. package/dist/src/mobile/android/gradle/types.js +1 -0
  125. package/dist/src/mobile/android/gradle/validate/executor.js +9 -0
  126. package/dist/src/mobile/android/gradle/validate/operationCheckResult.js +99 -0
  127. package/dist/src/mobile/android/gradle/validate/operations.js +68 -0
  128. package/dist/src/mobile/android/gradle/validate/planner.js +49 -0
  129. package/dist/src/mobile/android/gradle/validate/runOptionalGradleValidation.js +113 -0
  130. package/dist/src/mobile/android/gradle/validate/targetMutation.js +45 -0
  131. package/dist/src/mobile/android/gradle/validate/taskListParser.js +24 -0
  132. package/dist/src/mobile/android/gradle/versionCatalogMetadata.js +94 -0
  133. package/dist/src/mobile/android/gradle/wrapperMetadata.js +32 -0
  134. package/dist/src/mobile/android/manifest/parseAndroidManifest.js +364 -0
  135. package/dist/src/mobile/android/manifest/types.js +29 -0
  136. package/dist/src/mobile/android/manifest/xml/parseXml.js +329 -0
  137. package/dist/src/mobile/android/profile.js +29 -0
  138. package/dist/src/mobile/android/report/model.js +135 -0
  139. package/dist/src/mobile/android/report/renderAndroidReport.js +286 -0
  140. package/dist/src/mobile/android/report/writeAndroidReportFiles.js +23 -0
  141. package/dist/src/mobile/android/targetMetadata.js +27 -0
  142. package/dist/src/mobile/android/validate/androidVerdict.js +248 -0
  143. package/dist/src/mobile/android/validate/detectionAndImmutabilityCheckResults.js +177 -0
  144. package/dist/src/mobile/android/validate/playReadinessChecklist.js +145 -0
  145. package/dist/src/mobile/android/validate/validateAndroidTarget.js +315 -0
  146. package/dist/src/mobile/android/validation/checkResult.js +58 -0
  147. package/dist/src/mobile/android/validation/result.js +25 -0
  148. package/dist/src/mobile/index.js +42 -0
  149. package/dist/src/mobile/types.js +27 -0
  150. package/dist/src/securityValidation/attackScenarios/attackProfile.js +2 -0
  151. package/dist/src/securityValidation/attackScenarios/profiles/androidProfile.js +20 -0
  152. package/dist/src/securityValidation/commandRunner.js +10 -1
  153. package/dist/src/securityValidation/validate/cliOptions.js +92 -2
  154. package/package.json +2 -1
  155. package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-a/src/debug/res/xml/ambiguous_backup_rules.xml +4 -0
  156. package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-a/src/main/res/xml/ambiguous_backup_rules.xml +4 -0
  157. package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-a/src/main/res/xml/backup_rules.xml +5 -0
  158. package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-a/src/main/res/xml/broad_backup_rules.xml +4 -0
  159. package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-a/src/main/res/xml/data_extraction_rules.xml +10 -0
  160. package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-a/src/main/res/xml/unsupported_domain_rules.xml +4 -0
  161. package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-b/src/main/res/xml/malformed_backup_rules.xml +4 -0
  162. package/tests/fixtures/android/advanced-security-fixtures/backup-configuration/module-b/src/main/res/xml/unsupported_root.xml +4 -0
  163. package/tests/fixtures/android/advanced-security-fixtures/network-security/module-a/src/debug/res/xml/ambiguous_config.xml +4 -0
  164. package/tests/fixtures/android/advanced-security-fixtures/network-security/module-a/src/main/res/xml/ambiguous_config.xml +4 -0
  165. package/tests/fixtures/android/advanced-security-fixtures/network-security/module-a/src/main/res/xml/base_cleartext_false.xml +8 -0
  166. package/tests/fixtures/android/advanced-security-fixtures/network-security/module-a/src/main/res/xml/broad_and_duplicate_domains.xml +8 -0
  167. package/tests/fixtures/android/advanced-security-fixtures/network-security/module-a/src/main/res/xml/empty_domain.xml +6 -0
  168. package/tests/fixtures/android/advanced-security-fixtures/network-security/module-a/src/main/res/xml/malformed_pin.xml +11 -0
  169. package/tests/fixtures/android/advanced-security-fixtures/network-security/module-a/src/main/res/xml/network_security_config.xml +26 -0
  170. package/tests/fixtures/android/advanced-security-fixtures/network-security/module-b/src/main/res/xml/malformed_network_security_config.xml +6 -0
  171. package/tests/fixtures/android/advanced-security-fixtures/network-security/module-b/src/main/res/xml/unsupported_root.xml +4 -0
  172. package/tests/fixtures/android/advanced-security-fixtures/release-configuration/groovy-release-debuggable-dynamic.gradle +7 -0
  173. package/tests/fixtures/android/advanced-security-fixtures/release-configuration/groovy-release-debuggable-false.gradle +9 -0
  174. package/tests/fixtures/android/advanced-security-fixtures/release-configuration/groovy-release-debuggable-true.gradle +13 -0
  175. package/tests/fixtures/android/advanced-security-fixtures/release-configuration/kotlin-release-debuggable-false.gradle.kts +7 -0
  176. package/tests/fixtures/android/advanced-security-fixtures/release-configuration/kotlin-release-debuggable-true.gradle.kts +10 -0
  177. package/tests/fixtures/android/advanced-security-fixtures/release-configuration/missing-release-build-type.gradle.kts +7 -0
  178. package/tests/fixtures/android/advanced-security-fixtures/resource-resolution/module-a/src/debug/res/xml/network_security_config.xml +8 -0
  179. package/tests/fixtures/android/advanced-security-fixtures/resource-resolution/module-a/src/main/res/xml/backup_rules.xml +4 -0
  180. package/tests/fixtures/android/advanced-security-fixtures/resource-resolution/module-a/src/main/res/xml/network_security_config.xml +8 -0
  181. package/tests/fixtures/android/advanced-security-fixtures/resource-resolution/module-b/src/main/res/xml/malformed_network_security_config.xml +7 -0
  182. package/tests/fixtures/android/advanced-security-fixtures/secret-candidates/SampleActivity.java +8 -0
  183. package/tests/fixtures/android/advanced-security-fixtures/secret-candidates/SampleActivity.kt +9 -0
  184. package/tests/fixtures/android/advanced-security-fixtures/secret-candidates/build.gradle +11 -0
  185. package/tests/fixtures/android/advanced-security-fixtures/secret-candidates/build.gradle.kts +11 -0
  186. package/tests/fixtures/android/advanced-security-fixtures/secret-candidates/google-services.json +16 -0
  187. package/tests/fixtures/android/advanced-security-fixtures/secret-candidates/local.properties +3 -0
  188. package/tests/fixtures/android/advanced-security-fixtures/secret-candidates-bounds/module/binary.properties +0 -0
  189. package/tests/fixtures/android/advanced-security-fixtures/secret-candidates-bounds/module/oversized.json +1 -0
  190. package/tests/fixtures/android/advanced-security-fixtures/signing-configuration/app/fake-release-keystore.jks +1 -0
  191. package/tests/fixtures/android/advanced-security-fixtures/signing-configuration/build/generated-fake.keystore +1 -0
  192. package/tests/fixtures/android/compose-app/app/build.gradle.kts +21 -0
  193. package/tests/fixtures/android/compose-app/app/src/main/AndroidManifest.xml +22 -0
  194. package/tests/fixtures/android/compose-app/app/src/main/java/com/example/composeapp/MainActivity.kt +11 -0
  195. package/tests/fixtures/android/compose-app/build.gradle.kts +4 -0
  196. package/tests/fixtures/android/compose-app/gradle/wrapper/gradle-wrapper.properties +4 -0
  197. package/tests/fixtures/android/compose-app/settings.gradle.kts +2 -0
  198. package/tests/fixtures/android/gradle-metadata-fixtures/catalog-only-plugin/build.gradle.kts +3 -0
  199. package/tests/fixtures/android/gradle-metadata-fixtures/catalog-only-plugin/gradle/libs.versions.toml +5 -0
  200. package/tests/fixtures/android/gradle-metadata-fixtures/comment-safety.gradle.kts +21 -0
  201. package/tests/fixtures/android/gradle-metadata-fixtures/dynamic-values.gradle.kts +17 -0
  202. package/tests/fixtures/android/gradle-metadata-fixtures/groovy-literal.gradle +23 -0
  203. package/tests/fixtures/android/gradle-metadata-fixtures/wrapper-malformed.properties +4 -0
  204. package/tests/fixtures/android/gradle-metadata-fixtures/wrapper-missing-url.properties +3 -0
  205. package/tests/fixtures/android/gradle-metadata-fixtures/wrapper-with-checksum.properties +5 -0
  206. package/tests/fixtures/android/java-app/app/build.gradle +16 -0
  207. package/tests/fixtures/android/java-app/app/src/main/AndroidManifest.xml +19 -0
  208. package/tests/fixtures/android/java-app/app/src/main/java/com/example/javaapp/MainActivity.java +4 -0
  209. package/tests/fixtures/android/java-app/build.gradle +3 -0
  210. package/tests/fixtures/android/java-app/gradle/wrapper/gradle-wrapper.properties +4 -0
  211. package/tests/fixtures/android/java-app/settings.gradle +2 -0
  212. package/tests/fixtures/android/library/build.gradle.kts +3 -0
  213. package/tests/fixtures/android/library/gradle/wrapper/gradle-wrapper.properties +4 -0
  214. package/tests/fixtures/android/library/mylibrary/build.gradle.kts +13 -0
  215. package/tests/fixtures/android/library/mylibrary/src/main/AndroidManifest.xml +2 -0
  216. package/tests/fixtures/android/library/settings.gradle.kts +2 -0
  217. package/tests/fixtures/android/manifest-audit-fixtures/incomplete-intent-filter.xml +14 -0
  218. package/tests/fixtures/android/manifest-audit-fixtures/malformed-exported.xml +10 -0
  219. package/tests/fixtures/android/manifest-audit-fixtures/malformed.xml +5 -0
  220. package/tests/fixtures/android/manifest-audit-fixtures/missing-application.xml +7 -0
  221. package/tests/fixtures/android/manifest-audit-fixtures/missing-component-name.xml +11 -0
  222. package/tests/fixtures/android/manifest-audit-fixtures/permission-coverage.xml +29 -0
  223. package/tests/fixtures/android/manifest-audit-fixtures/risky-components.xml +62 -0
  224. package/tests/fixtures/android/manifest-audit-fixtures/risky-deep-links.xml +45 -0
  225. package/tests/fixtures/android/manifest-audit-fixtures/unresolved-placeholder.xml +14 -0
  226. package/tests/fixtures/android/manifest-audit-fixtures/unusual-namespace-prefix.xml +11 -0
  227. package/tests/fixtures/android/multi-module/app/build.gradle.kts +22 -0
  228. package/tests/fixtures/android/multi-module/app/src/androidTest/java/com/example/multimodule/app/ExampleInstrumentedTest.kt +3 -0
  229. package/tests/fixtures/android/multi-module/app/src/main/AndroidManifest.xml +11 -0
  230. package/tests/fixtures/android/multi-module/app/src/test/java/com/example/multimodule/app/ExampleUnitTest.kt +3 -0
  231. package/tests/fixtures/android/multi-module/build.gradle.kts +5 -0
  232. package/tests/fixtures/android/multi-module/core/build.gradle.kts +14 -0
  233. package/tests/fixtures/android/multi-module/core/src/main/AndroidManifest.xml +2 -0
  234. package/tests/fixtures/android/multi-module/feature-login/build.gradle.kts +18 -0
  235. package/tests/fixtures/android/multi-module/feature-login/src/main/AndroidManifest.xml +2 -0
  236. package/tests/fixtures/android/multi-module/gradle/libs.versions.toml +8 -0
  237. package/tests/fixtures/android/multi-module/gradle/wrapper/gradle-wrapper.properties +4 -0
  238. package/tests/fixtures/android/multi-module/settings.gradle.kts +4 -0
  239. package/tests/fixtures/android/non-android-gradle/build.gradle.kts +3 -0
  240. package/tests/fixtures/android/non-android-gradle/core/build.gradle.kts +3 -0
  241. package/tests/fixtures/android/non-android-gradle/core/src/main/java/com/example/core/Core.java +4 -0
  242. package/tests/fixtures/android/non-android-gradle/gradle/wrapper/gradle-wrapper.properties +4 -0
  243. package/tests/fixtures/android/non-android-gradle/settings.gradle.kts +2 -0
  244. package/tests/fixtures/android/partial/app/build.gradle.kts +7 -0
  245. package/tests/fixtures/android/partial/settings.gradle.kts +2 -0
  246. package/tests/fixtures/android/xml-view-app/app/build.gradle.kts +17 -0
  247. package/tests/fixtures/android/xml-view-app/app/src/main/AndroidManifest.xml +31 -0
  248. package/tests/fixtures/android/xml-view-app/app/src/main/kotlin/com/example/xmlviewapp/MainActivity.kt +7 -0
  249. package/tests/fixtures/android/xml-view-app/app/src/main/res/layout/activity_main.xml +4 -0
  250. package/tests/fixtures/android/xml-view-app/build.gradle.kts +4 -0
  251. package/tests/fixtures/android/xml-view-app/gradle/wrapper/gradle-wrapper.properties +4 -0
  252. package/tests/fixtures/android/xml-view-app/settings.gradle.kts +2 -0
@@ -0,0 +1 @@
1
+ FAKE_KEYSTORE_DUMMY_BYTES_NOT_A_REAL_KEYSTORE
@@ -0,0 +1,21 @@
1
+ plugins {
2
+ id("com.android.application")
3
+ id("org.jetbrains.kotlin.android")
4
+ }
5
+
6
+ android {
7
+ namespace = "com.example.composeapp"
8
+ compileSdk = 34
9
+
10
+ defaultConfig {
11
+ applicationId = "com.example.composeapp"
12
+ minSdk = 24
13
+ targetSdk = 34
14
+ versionCode = 1
15
+ versionName = "1.0"
16
+ }
17
+
18
+ buildFeatures {
19
+ compose = true
20
+ }
21
+ }
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
+
4
+ <uses-permission android:name="android.permission.INTERNET" />
5
+
6
+ <application
7
+ android:label="Compose App"
8
+ android:icon="@mipmap/ic_launcher"
9
+ android:allowBackup="true">
10
+
11
+ <activity
12
+ android:name=".MainActivity"
13
+ android:exported="true">
14
+ <intent-filter>
15
+ <action android:name="android.intent.action.MAIN" />
16
+ <category android:name="android.intent.category.LAUNCHER" />
17
+ </intent-filter>
18
+ </activity>
19
+
20
+ </application>
21
+
22
+ </manifest>
@@ -0,0 +1,11 @@
1
+ package com.example.composeapp
2
+
3
+ import androidx.compose.runtime.Composable
4
+ import androidx.compose.material3.Text
5
+
6
+ class MainActivity
7
+
8
+ @Composable
9
+ fun Greeting(name: String) {
10
+ Text(text = "Hello, $name!")
11
+ }
@@ -0,0 +1,4 @@
1
+ plugins {
2
+ id("com.android.application") version "8.2.0" apply false
3
+ id("org.jetbrains.kotlin.android") version "1.9.22" apply false
4
+ }
@@ -0,0 +1,4 @@
1
+ distributionBase=GRADLE_USER_HOME
2
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
3
+ distributionPath=wrapper/dists
4
+ zipStorePath=wrapper/dists
@@ -0,0 +1,2 @@
1
+ rootProject.name = "compose-app"
2
+ include(":app")
@@ -0,0 +1,3 @@
1
+ plugins {
2
+ alias(libs.plugins.android.application) apply false
3
+ }
@@ -0,0 +1,5 @@
1
+ [versions]
2
+ agp = "8.2.2"
3
+
4
+ [plugins]
5
+ android-application = { id = "com.android.application", version.ref = "agp" }
@@ -0,0 +1,21 @@
1
+ plugins {
2
+ id("com.android.application")
3
+ }
4
+
5
+ // applicationId = "com.example.commented-out-should-not-be-used"
6
+ /*
7
+ namespace = "com.example.also-commented-out"
8
+ */
9
+
10
+ android {
11
+ namespace = "com.example.commentsafety"
12
+ // A string that merely mentions "applicationId" in prose should not match.
13
+ val note = "the applicationId field below is the real one"
14
+
15
+ defaultConfig {
16
+ applicationId = "com.example.commentsafety"
17
+ minSdk = 24
18
+ targetSdk = 34
19
+ compileSdk = 34
20
+ }
21
+ }
@@ -0,0 +1,17 @@
1
+ plugins {
2
+ id("com.android.application")
3
+ }
4
+
5
+ val gitVersionName = providers.exec { commandLine("git", "describe") }.standardOutput.asText.get()
6
+
7
+ android {
8
+ namespace = "com.example.dynamic"
9
+ compileSdk = libs.versions.compileSdk.get().toInt()
10
+
11
+ defaultConfig {
12
+ applicationId = appIdFromProperties()
13
+ versionName = gitVersionName
14
+ targetSdk = project.property("targetSdkFromProperties") as Int
15
+ minSdk = 24
16
+ }
17
+ }
@@ -0,0 +1,23 @@
1
+ apply plugin: 'com.android.application'
2
+
3
+ android {
4
+ namespace "com.example.groovyliteral"
5
+ compileSdkVersion 33
6
+
7
+ defaultConfig {
8
+ applicationId "com.example.groovyliteral"
9
+ minSdkVersion 21
10
+ targetSdkVersion 33
11
+ versionCode 2
12
+ versionName "2.0"
13
+ }
14
+
15
+ buildTypes {
16
+ debug {
17
+ }
18
+ release {
19
+ }
20
+ staging {
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,4 @@
1
+ distributionBase=GRADLE_USER_HOME
2
+ distributionUrl=https\://services.gradle.org/distributions/not-a-real-distribution.zip
3
+ distributionPath=wrapper/dists
4
+ zipStorePath=wrapper/dists
@@ -0,0 +1,3 @@
1
+ distributionBase=GRADLE_USER_HOME
2
+ distributionPath=wrapper/dists
3
+ zipStorePath=wrapper/dists
@@ -0,0 +1,5 @@
1
+ distributionBase=GRADLE_USER_HOME
2
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
3
+ distributionSha256Sum=abcdef1234567890
4
+ distributionPath=wrapper/dists
5
+ zipStorePath=wrapper/dists
@@ -0,0 +1,16 @@
1
+ plugins {
2
+ id 'com.android.application'
3
+ }
4
+
5
+ android {
6
+ namespace 'com.example.javaapp'
7
+ compileSdk 34
8
+
9
+ defaultConfig {
10
+ applicationId 'com.example.javaapp'
11
+ minSdk 21
12
+ targetSdk 34
13
+ versionCode 1
14
+ versionName '1.0'
15
+ }
16
+ }
@@ -0,0 +1,19 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
+
4
+ <application
5
+ android:label="Java App"
6
+ android:icon="@mipmap/ic_launcher">
7
+
8
+ <activity
9
+ android:name=".MainActivity"
10
+ android:exported="true">
11
+ <intent-filter>
12
+ <action android:name="android.intent.action.MAIN" />
13
+ <category android:name="android.intent.category.LAUNCHER" />
14
+ </intent-filter>
15
+ </activity>
16
+
17
+ </application>
18
+
19
+ </manifest>
@@ -0,0 +1,4 @@
1
+ package com.example.javaapp;
2
+
3
+ public class MainActivity {
4
+ }
@@ -0,0 +1,3 @@
1
+ plugins {
2
+ id 'com.android.application' version '8.2.0' apply false
3
+ }
@@ -0,0 +1,4 @@
1
+ distributionBase=GRADLE_USER_HOME
2
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
3
+ distributionPath=wrapper/dists
4
+ zipStorePath=wrapper/dists
@@ -0,0 +1,2 @@
1
+ rootProject.name = 'java-app'
2
+ include ':app'
@@ -0,0 +1,3 @@
1
+ plugins {
2
+ id("com.android.library") version "8.2.0" apply false
3
+ }
@@ -0,0 +1,4 @@
1
+ distributionBase=GRADLE_USER_HOME
2
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
3
+ distributionPath=wrapper/dists
4
+ zipStorePath=wrapper/dists
@@ -0,0 +1,13 @@
1
+ plugins {
2
+ id("com.android.library")
3
+ }
4
+
5
+ android {
6
+ namespace = "com.example.mylibrary"
7
+ compileSdk = 34
8
+
9
+ defaultConfig {
10
+ minSdk = 21
11
+ targetSdk = 34
12
+ }
13
+ }
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android" />
@@ -0,0 +1,2 @@
1
+ rootProject.name = "library"
2
+ include(":mylibrary")
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <application>
4
+ <activity android:name=".EmptyFilterActivity" android:exported="true">
5
+ <intent-filter>
6
+ </intent-filter>
7
+ </activity>
8
+ <activity android:name=".BrowsableOnlyActivity" android:exported="true">
9
+ <intent-filter>
10
+ <category android:name="android.intent.category.BROWSABLE" />
11
+ </intent-filter>
12
+ </activity>
13
+ </application>
14
+ </manifest>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <application>
4
+ <activity android:name=".WeirdActivity" android:exported="maybe">
5
+ <intent-filter>
6
+ <action android:name="android.intent.action.VIEW" />
7
+ </intent-filter>
8
+ </activity>
9
+ </application>
10
+ </manifest>
@@ -0,0 +1,5 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ <application>
3
+ <activity android:name=".MainActivity">
4
+ </application>
5
+ </manifest>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
+ package="com.example.missingapp">
4
+
5
+ <uses-permission android:name="android.permission.INTERNET" />
6
+
7
+ </manifest>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <application>
4
+ <activity android:exported="true">
5
+ <intent-filter>
6
+ <action android:name="android.intent.action.MAIN" />
7
+ <category android:name="android.intent.category.LAUNCHER" />
8
+ </intent-filter>
9
+ </activity>
10
+ </application>
11
+ </manifest>
@@ -0,0 +1,29 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
+ package="com.example.permissions">
4
+
5
+ <uses-permission android:name="android.permission.INTERNET" />
6
+ <uses-permission android:name="android.permission.CAMERA" />
7
+ <uses-permission android:name="android.permission.RECORD_AUDIO" />
8
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
9
+ <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
10
+ <uses-permission android:name="android.permission.READ_CONTACTS" />
11
+ <uses-permission android:name="android.permission.READ_CALENDAR" />
12
+ <uses-permission android:name="android.permission.SEND_SMS" />
13
+ <uses-permission android:name="android.permission.READ_CALL_LOG" />
14
+ <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
15
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
16
+ <uses-permission android:name="com.example.permissions.CUSTOM_PERMISSION" />
17
+ <uses-permission android:name="android.permission.CAMERA" />
18
+ <uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_CONNECT" />
19
+
20
+ <application>
21
+ <activity android:name=".MainActivity" android:exported="true">
22
+ <intent-filter>
23
+ <action android:name="android.intent.action.MAIN" />
24
+ <category android:name="android.intent.category.LAUNCHER" />
25
+ </intent-filter>
26
+ </activity>
27
+ </application>
28
+
29
+ </manifest>
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
+ package="com.example.risky">
4
+
5
+ <application>
6
+
7
+ <activity android:name=".MainActivity" android:exported="true">
8
+ <intent-filter>
9
+ <action android:name="android.intent.action.MAIN" />
10
+ <category android:name="android.intent.category.LAUNCHER" />
11
+ </intent-filter>
12
+ </activity>
13
+
14
+ <activity android:name=".UnprotectedExportedActivity" android:exported="true">
15
+ <intent-filter>
16
+ <action android:name="com.example.risky.CUSTOM_ACTION" />
17
+ <category android:name="android.intent.category.DEFAULT" />
18
+ </intent-filter>
19
+ </activity>
20
+
21
+ <activity android:name=".ProtectedExportedActivity"
22
+ android:exported="true"
23
+ android:permission="com.example.risky.permission.ADMIN" />
24
+
25
+ <activity android:name=".UnspecifiedExportedActivity">
26
+ <intent-filter>
27
+ <action android:name="com.example.risky.ANOTHER_ACTION" />
28
+ </intent-filter>
29
+ </activity>
30
+
31
+ <activity android:name=".NotExportedActivity" android:exported="false" />
32
+
33
+ <service android:name=".UnprotectedExportedService" android:exported="true">
34
+ <intent-filter>
35
+ <action android:name="com.example.risky.SERVICE_ACTION" />
36
+ </intent-filter>
37
+ </service>
38
+
39
+ <receiver android:name=".UnprotectedExportedReceiver" android:exported="true">
40
+ <intent-filter>
41
+ <action android:name="com.example.risky.RECEIVER_ACTION" />
42
+ </intent-filter>
43
+ </receiver>
44
+
45
+ <provider android:name=".UnprotectedExportedProvider"
46
+ android:authorities="com.example.risky.provider"
47
+ android:exported="true" />
48
+
49
+ <provider android:name=".PartiallyProtectedProvider"
50
+ android:authorities="com.example.risky.provider2"
51
+ android:exported="true"
52
+ android:readPermission="com.example.risky.permission.READ" />
53
+
54
+ <provider android:name=".FullyProtectedProvider"
55
+ android:authorities="com.example.risky.provider3"
56
+ android:exported="true"
57
+ android:readPermission="com.example.risky.permission.READ"
58
+ android:writePermission="com.example.risky.permission.WRITE" />
59
+
60
+ </application>
61
+
62
+ </manifest>
@@ -0,0 +1,45 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
+ package="com.example.deeplinks">
4
+
5
+ <application>
6
+
7
+ <activity android:name=".CustomSchemeNoHostActivity" android:exported="true">
8
+ <intent-filter>
9
+ <action android:name="android.intent.action.VIEW" />
10
+ <category android:name="android.intent.category.DEFAULT" />
11
+ <category android:name="android.intent.category.BROWSABLE" />
12
+ <data android:scheme="myapp" />
13
+ </intent-filter>
14
+ </activity>
15
+
16
+ <activity android:name=".HttpNoHostActivity" android:exported="true">
17
+ <intent-filter>
18
+ <action android:name="android.intent.action.VIEW" />
19
+ <category android:name="android.intent.category.DEFAULT" />
20
+ <category android:name="android.intent.category.BROWSABLE" />
21
+ <data android:scheme="https" />
22
+ </intent-filter>
23
+ </activity>
24
+
25
+ <activity android:name=".BroadPathPatternActivity" android:exported="true">
26
+ <intent-filter>
27
+ <action android:name="android.intent.action.VIEW" />
28
+ <category android:name="android.intent.category.DEFAULT" />
29
+ <category android:name="android.intent.category.BROWSABLE" />
30
+ <data android:scheme="https" android:host="example.com" android:pathPattern=".*" />
31
+ </intent-filter>
32
+ </activity>
33
+
34
+ <activity android:name=".BoundedSafeDeepLinkActivity" android:exported="true">
35
+ <intent-filter android:autoVerify="true">
36
+ <action android:name="android.intent.action.VIEW" />
37
+ <category android:name="android.intent.category.DEFAULT" />
38
+ <category android:name="android.intent.category.BROWSABLE" />
39
+ <data android:scheme="https" android:host="example.com" android:pathPrefix="/product" />
40
+ </intent-filter>
41
+ </activity>
42
+
43
+ </application>
44
+
45
+ </manifest>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
+ package="${applicationId}">
4
+ <application android:label="@string/app_name" android:icon="@mipmap/ic_launcher">
5
+ <activity android:name=".ShareActivity" android:exported="true">
6
+ <intent-filter android:autoVerify="true">
7
+ <action android:name="android.intent.action.VIEW" />
8
+ <category android:name="android.intent.category.DEFAULT" />
9
+ <category android:name="android.intent.category.BROWSABLE" />
10
+ <data android:scheme="${deepLinkScheme}" android:host="@string/deep_link_host" />
11
+ </intent-filter>
12
+ </activity>
13
+ </application>
14
+ </manifest>
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:x="http://schemas.android.com/apk/res/android">
3
+ <application>
4
+ <activity x:name=".MainActivity" x:exported="true">
5
+ <intent-filter>
6
+ <action x:name="android.intent.action.MAIN" />
7
+ <category x:name="android.intent.category.LAUNCHER" />
8
+ </intent-filter>
9
+ </activity>
10
+ </application>
11
+ </manifest>
@@ -0,0 +1,22 @@
1
+ plugins {
2
+ id("com.android.application")
3
+ id("org.jetbrains.kotlin.android")
4
+ }
5
+
6
+ android {
7
+ namespace = "com.example.multimodule.app"
8
+ compileSdk = 34
9
+
10
+ defaultConfig {
11
+ applicationId = "com.example.multimodule.app"
12
+ minSdk = 24
13
+ targetSdk = 34
14
+ versionCode = 1
15
+ versionName = "1.0"
16
+ }
17
+ }
18
+
19
+ dependencies {
20
+ implementation(project(":core"))
21
+ implementation(project(":feature-login"))
22
+ }
@@ -0,0 +1,3 @@
1
+ package com.example.multimodule.app
2
+
3
+ class ExampleInstrumentedTest
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <application android:label="Multi Module App">
4
+ <activity android:name=".MainActivity" android:exported="true">
5
+ <intent-filter>
6
+ <action android:name="android.intent.action.MAIN" />
7
+ <category android:name="android.intent.category.LAUNCHER" />
8
+ </intent-filter>
9
+ </activity>
10
+ </application>
11
+ </manifest>
@@ -0,0 +1,3 @@
1
+ package com.example.multimodule.app
2
+
3
+ class ExampleUnitTest
@@ -0,0 +1,5 @@
1
+ plugins {
2
+ id("com.android.application") version "8.2.0" apply false
3
+ id("com.android.library") version "8.2.0" apply false
4
+ id("org.jetbrains.kotlin.android") version "1.9.22" apply false
5
+ }
@@ -0,0 +1,14 @@
1
+ plugins {
2
+ id("com.android.library")
3
+ id("org.jetbrains.kotlin.android")
4
+ }
5
+
6
+ android {
7
+ namespace = "com.example.multimodule.core"
8
+ compileSdk = 34
9
+
10
+ defaultConfig {
11
+ minSdk = 24
12
+ targetSdk = 34
13
+ }
14
+ }
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android" />
@@ -0,0 +1,18 @@
1
+ plugins {
2
+ id("com.android.library")
3
+ id("org.jetbrains.kotlin.android")
4
+ }
5
+
6
+ android {
7
+ namespace = "com.example.multimodule.featurelogin"
8
+ compileSdk = 34
9
+
10
+ defaultConfig {
11
+ minSdk = 24
12
+ targetSdk = 34
13
+ }
14
+ }
15
+
16
+ dependencies {
17
+ implementation(project(":core"))
18
+ }
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android" />
@@ -0,0 +1,8 @@
1
+ [versions]
2
+ agp = "8.2.0"
3
+ kotlin = "1.9.22"
4
+
5
+ [plugins]
6
+ android-application = { id = "com.android.application", version.ref = "agp" }
7
+ android-library = { id = "com.android.library", version.ref = "agp" }
8
+ kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
@@ -0,0 +1,4 @@
1
+ distributionBase=GRADLE_USER_HOME
2
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
3
+ distributionPath=wrapper/dists
4
+ zipStorePath=wrapper/dists
@@ -0,0 +1,4 @@
1
+ rootProject.name = "multi-module"
2
+ include(":app")
3
+ include(":core")
4
+ include(":feature-login")
@@ -0,0 +1,3 @@
1
+ plugins {
2
+ id("java-library")
3
+ }
@@ -0,0 +1,3 @@
1
+ plugins {
2
+ id("java-library")
3
+ }
@@ -0,0 +1,4 @@
1
+ package com.example.core;
2
+
3
+ public class Core {
4
+ }
@@ -0,0 +1,4 @@
1
+ distributionBase=GRADLE_USER_HOME
2
+ distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
3
+ distributionPath=wrapper/dists
4
+ zipStorePath=wrapper/dists