@rock-js/platform-android 0.8.13

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 (128) hide show
  1. package/README.md +7 -0
  2. package/dist/src/index.d.ts +3 -0
  3. package/dist/src/index.d.ts.map +1 -0
  4. package/dist/src/index.js +4 -0
  5. package/dist/src/index.js.map +1 -0
  6. package/dist/src/lib/commands/aar/packageAar.d.ts +14 -0
  7. package/dist/src/lib/commands/aar/packageAar.d.ts.map +1 -0
  8. package/dist/src/lib/commands/aar/packageAar.js +34 -0
  9. package/dist/src/lib/commands/aar/packageAar.js.map +1 -0
  10. package/dist/src/lib/commands/aar/publishLocalAar.d.ts +6 -0
  11. package/dist/src/lib/commands/aar/publishLocalAar.d.ts.map +1 -0
  12. package/dist/src/lib/commands/aar/publishLocalAar.js +17 -0
  13. package/dist/src/lib/commands/aar/publishLocalAar.js.map +1 -0
  14. package/dist/src/lib/commands/buildAndroid/buildAndroid.d.ts +21 -0
  15. package/dist/src/lib/commands/buildAndroid/buildAndroid.d.ts.map +1 -0
  16. package/dist/src/lib/commands/buildAndroid/buildAndroid.js +68 -0
  17. package/dist/src/lib/commands/buildAndroid/buildAndroid.js.map +1 -0
  18. package/dist/src/lib/commands/buildAndroid/command.d.ts +3 -0
  19. package/dist/src/lib/commands/buildAndroid/command.d.ts.map +1 -0
  20. package/dist/src/lib/commands/buildAndroid/command.js +14 -0
  21. package/dist/src/lib/commands/buildAndroid/command.js.map +1 -0
  22. package/dist/src/lib/commands/generateKeystore.d.ts +13 -0
  23. package/dist/src/lib/commands/generateKeystore.d.ts.map +1 -0
  24. package/dist/src/lib/commands/generateKeystore.js +80 -0
  25. package/dist/src/lib/commands/generateKeystore.js.map +1 -0
  26. package/dist/src/lib/commands/getValidProjectConfig.d.ts +2 -0
  27. package/dist/src/lib/commands/getValidProjectConfig.d.ts.map +1 -0
  28. package/dist/src/lib/commands/getValidProjectConfig.js +10 -0
  29. package/dist/src/lib/commands/getValidProjectConfig.js.map +1 -0
  30. package/dist/src/lib/commands/runAndroid/adb.d.ts +5 -0
  31. package/dist/src/lib/commands/runAndroid/adb.d.ts.map +1 -0
  32. package/dist/src/lib/commands/runAndroid/adb.js +38 -0
  33. package/dist/src/lib/commands/runAndroid/adb.js.map +1 -0
  34. package/dist/src/lib/commands/runAndroid/command.d.ts +3 -0
  35. package/dist/src/lib/commands/runAndroid/command.d.ts.map +1 -0
  36. package/dist/src/lib/commands/runAndroid/command.js +15 -0
  37. package/dist/src/lib/commands/runAndroid/command.js.map +1 -0
  38. package/dist/src/lib/commands/runAndroid/findOutputFile.d.ts +2 -0
  39. package/dist/src/lib/commands/runAndroid/findOutputFile.d.ts.map +1 -0
  40. package/dist/src/lib/commands/runAndroid/findOutputFile.js +67 -0
  41. package/dist/src/lib/commands/runAndroid/findOutputFile.js.map +1 -0
  42. package/dist/src/lib/commands/runAndroid/listAndroidDevices.d.ts +7 -0
  43. package/dist/src/lib/commands/runAndroid/listAndroidDevices.d.ts.map +1 -0
  44. package/dist/src/lib/commands/runAndroid/listAndroidDevices.js +69 -0
  45. package/dist/src/lib/commands/runAndroid/listAndroidDevices.js.map +1 -0
  46. package/dist/src/lib/commands/runAndroid/listAndroidUsers.d.ts +7 -0
  47. package/dist/src/lib/commands/runAndroid/listAndroidUsers.d.ts.map +1 -0
  48. package/dist/src/lib/commands/runAndroid/listAndroidUsers.js +42 -0
  49. package/dist/src/lib/commands/runAndroid/listAndroidUsers.js.map +1 -0
  50. package/dist/src/lib/commands/runAndroid/runAndroid.d.ts +31 -0
  51. package/dist/src/lib/commands/runAndroid/runAndroid.d.ts.map +1 -0
  52. package/dist/src/lib/commands/runAndroid/runAndroid.js +178 -0
  53. package/dist/src/lib/commands/runAndroid/runAndroid.js.map +1 -0
  54. package/dist/src/lib/commands/runAndroid/tryInstallAppOnDevice.d.ts +3 -0
  55. package/dist/src/lib/commands/runAndroid/tryInstallAppOnDevice.d.ts.map +1 -0
  56. package/dist/src/lib/commands/runAndroid/tryInstallAppOnDevice.js +63 -0
  57. package/dist/src/lib/commands/runAndroid/tryInstallAppOnDevice.js.map +1 -0
  58. package/dist/src/lib/commands/runAndroid/tryLaunchAppOnDevice.d.ts +7 -0
  59. package/dist/src/lib/commands/runAndroid/tryLaunchAppOnDevice.d.ts.map +1 -0
  60. package/dist/src/lib/commands/runAndroid/tryLaunchAppOnDevice.js +51 -0
  61. package/dist/src/lib/commands/runAndroid/tryLaunchAppOnDevice.js.map +1 -0
  62. package/dist/src/lib/commands/runAndroid/tryLaunchEmulator.d.ts +2 -0
  63. package/dist/src/lib/commands/runAndroid/tryLaunchEmulator.d.ts.map +1 -0
  64. package/dist/src/lib/commands/runAndroid/tryLaunchEmulator.js +120 -0
  65. package/dist/src/lib/commands/runAndroid/tryLaunchEmulator.js.map +1 -0
  66. package/dist/src/lib/commands/runAndroid/tryRunAdbReverse.d.ts +1 -0
  67. package/dist/src/lib/commands/runAndroid/tryRunAdbReverse.d.ts.map +1 -0
  68. package/dist/src/lib/commands/runAndroid/tryRunAdbReverse.js +21 -0
  69. package/dist/src/lib/commands/runAndroid/tryRunAdbReverse.js.map +1 -0
  70. package/dist/src/lib/commands/runGradle.d.ts +18 -0
  71. package/dist/src/lib/commands/runGradle.d.ts.map +1 -0
  72. package/dist/src/lib/commands/runGradle.js +124 -0
  73. package/dist/src/lib/commands/runGradle.js.map +1 -0
  74. package/dist/src/lib/commands/signAndroid/bundle.d.ts +8 -0
  75. package/dist/src/lib/commands/signAndroid/bundle.d.ts.map +1 -0
  76. package/dist/src/lib/commands/signAndroid/bundle.js +58 -0
  77. package/dist/src/lib/commands/signAndroid/bundle.js.map +1 -0
  78. package/dist/src/lib/commands/signAndroid/command.d.ts +14 -0
  79. package/dist/src/lib/commands/signAndroid/command.d.ts.map +1 -0
  80. package/dist/src/lib/commands/signAndroid/command.js +67 -0
  81. package/dist/src/lib/commands/signAndroid/command.js.map +1 -0
  82. package/dist/src/lib/commands/signAndroid/signAndroid.d.ts +12 -0
  83. package/dist/src/lib/commands/signAndroid/signAndroid.d.ts.map +1 -0
  84. package/dist/src/lib/commands/signAndroid/signAndroid.js +163 -0
  85. package/dist/src/lib/commands/signAndroid/signAndroid.js.map +1 -0
  86. package/dist/src/lib/commands/toPascalCase.d.ts +1 -0
  87. package/dist/src/lib/commands/toPascalCase.d.ts.map +1 -0
  88. package/dist/src/lib/commands/toPascalCase.js +4 -0
  89. package/dist/src/lib/commands/toPascalCase.js.map +1 -0
  90. package/dist/src/lib/paths.d.ts +7 -0
  91. package/dist/src/lib/paths.d.ts.map +1 -0
  92. package/dist/src/lib/paths.js +60 -0
  93. package/dist/src/lib/paths.js.map +1 -0
  94. package/dist/src/lib/platformAndroid.d.ts +5 -0
  95. package/dist/src/lib/platformAndroid.d.ts.map +1 -0
  96. package/dist/src/lib/platformAndroid.js +23 -0
  97. package/dist/src/lib/platformAndroid.js.map +1 -0
  98. package/package.json +35 -0
  99. package/react-native.config.ts +13 -0
  100. package/template/.github/workflows/remote-build-android.yml +64 -0
  101. package/template/android/app/build.gradle +127 -0
  102. package/template/android/app/debug.keystore +0 -0
  103. package/template/android/app/proguard-rules.pro +10 -0
  104. package/template/android/app/src/debug/AndroidManifest.xml +9 -0
  105. package/template/android/app/src/main/AndroidManifest.xml +26 -0
  106. package/template/android/app/src/main/java/com/helloworld/MainActivity.kt +22 -0
  107. package/template/android/app/src/main/java/com/helloworld/MainApplication.kt +38 -0
  108. package/template/android/app/src/main/res/drawable/rn_edit_text_material.xml +37 -0
  109. package/template/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  110. package/template/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  111. package/template/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  112. package/template/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  113. package/template/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  114. package/template/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  115. package/template/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  116. package/template/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  117. package/template/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  118. package/template/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  119. package/template/android/app/src/main/res/values/strings.xml +3 -0
  120. package/template/android/app/src/main/res/values/styles.xml +9 -0
  121. package/template/android/build.gradle +21 -0
  122. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  123. package/template/android/gradle/wrapper/gradle-wrapper.properties +7 -0
  124. package/template/android/gradle.properties +46 -0
  125. package/template/android/gradlew +251 -0
  126. package/template/android/gradlew.bat +99 -0
  127. package/template/android/settings.gradle +6 -0
  128. package/template/package.json +9 -0
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # @rock-js/platform-android
2
+
3
+ Android platform integration for Rock (Rock). This package is part of the Rock ecosystem and provides Android-specific build and development tools.
4
+
5
+ ## Documentation
6
+
7
+ For detailed documentation about Rock and its tools, visit [Rock Documentation](https://rockjs.dev)
@@ -0,0 +1,3 @@
1
+ export * from './lib/platformAndroid.js';
2
+ export { type PackageAarFlags, packageAar, options as packageAarOptions, } from './lib/commands/aar/packageAar.js';
3
+ export { publishLocalAar, options as publishLocalAarOptions, } from './lib/commands/aar/publishLocalAar.js';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,OAAO,EACL,KAAK,eAAe,EACpB,UAAU,EACV,OAAO,IAAI,iBAAiB,GAC7B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,eAAe,EACf,OAAO,IAAI,sBAAsB,GAClC,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './lib/platformAndroid.js';
2
+ export { packageAar, options as packageAarOptions, } from './lib/commands/aar/packageAar.js';
3
+ export { publishLocalAar, options as publishLocalAarOptions, } from './lib/commands/aar/publishLocalAar.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAEL,UAAU,EACV,OAAO,IAAI,iBAAiB,GAC7B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,eAAe,EACf,OAAO,IAAI,sBAAsB,GAClC,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface AarProject {
2
+ sourceDir: string;
3
+ moduleName: string;
4
+ }
5
+ export type PackageAarFlags = {
6
+ variant: string;
7
+ moduleName?: string;
8
+ };
9
+ export declare function packageAar(aarProject: AarProject, args: PackageAarFlags): Promise<void>;
10
+ export declare function localPublishAar(aarProject: AarProject, args: PackageAarFlags): Promise<void>;
11
+ export declare const options: {
12
+ name: string;
13
+ description: string;
14
+ }[];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageAar.d.ts","sourceRoot":"","sources":["../../../../../src/lib/commands/aar/packageAar.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAsB,UAAU,CAC9B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,eAAe,iBAQtB;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,eAAe,iBAUtB;AAQD,eAAO,MAAM,OAAO;;;GAUnB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { outro } from '@rock-js/tools';
2
+ import { runGradleAar } from '../runGradle.js';
3
+ import { toPascalCase } from '../toPascalCase.js';
4
+ export async function packageAar(aarProject, args) {
5
+ normalizeArgs(args);
6
+ const tasks = [`assemble${toPascalCase(args.variant)}`];
7
+ await runGradleAar({ tasks, aarProject, variant: args.variant });
8
+ outro('Success 🎉.');
9
+ }
10
+ export async function localPublishAar(aarProject, args) {
11
+ const tasks = ['publishToMavenLocal'];
12
+ await runGradleAar({
13
+ tasks,
14
+ aarProject,
15
+ variant: args.variant,
16
+ });
17
+ outro('Success 🎉.');
18
+ }
19
+ function normalizeArgs(args) {
20
+ if (!args.variant) {
21
+ args.variant = 'debug';
22
+ }
23
+ }
24
+ export const options = [
25
+ {
26
+ name: '--variant <string>',
27
+ description: "Specify your app's build variant, which is constructed from build type and product flavor, e.g. 'debug' or 'freeRelease'.",
28
+ },
29
+ {
30
+ name: '--module-name <string>',
31
+ description: 'AAR module name',
32
+ },
33
+ ];
34
+ //# sourceMappingURL=packageAar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageAar.js","sourceRoot":"","sources":["../../../../../src/lib/commands/aar/packageAar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAYlD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAAsB,EACtB,IAAqB;IAErB,aAAa,CAAC,IAAI,CAAC,CAAC;IAEpB,MAAM,KAAK,GAAG,CAAC,WAAW,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAExD,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACjE,KAAK,CAAC,aAAa,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAsB,EACtB,IAAqB;IAErB,MAAM,KAAK,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAEtC,MAAM,YAAY,CAAC;QACjB,KAAK;QACL,UAAU;QACV,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;IACH,KAAK,CAAC,aAAa,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,aAAa,CAAC,IAAqB;IAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,2HAA2H;KAC9H;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,iBAAiB;KAC/B;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { AarProject } from './packageAar.js';
2
+ export declare function publishLocalAar(aarProject: AarProject): Promise<void>;
3
+ export declare const options: {
4
+ name: string;
5
+ description: string;
6
+ }[];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publishLocalAar.d.ts","sourceRoot":"","sources":["../../../../../src/lib/commands/aar/publishLocalAar.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,wBAAsB,eAAe,CAAC,UAAU,EAAE,UAAU,iBAQ3D;AAED,eAAO,MAAM,OAAO;;;GAKnB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { outro } from '@rock-js/tools';
2
+ import { runGradleAar } from '../runGradle.js';
3
+ export async function publishLocalAar(aarProject) {
4
+ const tasks = ['publishToMavenLocal'];
5
+ await runGradleAar({
6
+ tasks,
7
+ aarProject,
8
+ });
9
+ outro('Success 🎉.');
10
+ }
11
+ export const options = [
12
+ {
13
+ name: '--module-name <string>',
14
+ description: 'AAR module name',
15
+ },
16
+ ];
17
+ //# sourceMappingURL=publishLocalAar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publishLocalAar.js","sourceRoot":"","sources":["../../../../../src/lib/commands/aar/publishLocalAar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAsB;IAC1D,MAAM,KAAK,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAEtC,MAAM,YAAY,CAAC;QACjB,KAAK;QACL,UAAU;KACX,CAAC,CAAC;IACH,KAAK,CAAC,aAAa,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,iBAAiB;KAC/B;CACF,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { AndroidProjectConfig } from '@react-native-community/cli-types';
2
+ import type { RemoteBuildCache } from '@rock-js/tools';
3
+ import { type FingerprintSources } from '@rock-js/tools';
4
+ export interface BuildFlags {
5
+ variant: string;
6
+ aab?: boolean;
7
+ activeArchOnly?: boolean;
8
+ tasks?: Array<string>;
9
+ extraParams?: Array<string>;
10
+ local?: boolean;
11
+ }
12
+ export declare function buildAndroid(androidProject: AndroidProjectConfig, args: BuildFlags, projectRoot: string, remoteCacheProvider: null | (() => RemoteBuildCache) | undefined, fingerprintOptions: FingerprintSources): Promise<void>;
13
+ export declare const options: ({
14
+ name: string;
15
+ description: string;
16
+ parse?: undefined;
17
+ } | {
18
+ name: string;
19
+ description: string;
20
+ parse: (val: string) => string[];
21
+ })[];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildAndroid.d.ts","sourceRoot":"","sources":["../../../../../src/lib/commands/buildAndroid/buildAndroid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAEL,KAAK,kBAAkB,EAOxB,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtB,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,YAAY,CAChC,cAAc,EAAE,oBAAoB,EACpC,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,IAAI,GAAG,CAAC,MAAM,gBAAgB,CAAC,GAAG,SAAS,EAChE,kBAAkB,EAAE,kBAAkB,iBAgCvC;AAaD,eAAO,MAAM,OAAO;;;;;;;iBAcH,MAAM;IAgBtB,CAAC"}
@@ -0,0 +1,68 @@
1
+ import { colorLink, formatArtifactName, getBinaryPath, logger, outro, parseArgs, relativeToCwd, } from '@rock-js/tools';
2
+ import { findOutputFile } from '../runAndroid/findOutputFile.js';
3
+ import { runGradle } from '../runGradle.js';
4
+ import { toPascalCase } from '../toPascalCase.js';
5
+ export async function buildAndroid(androidProject, args, projectRoot, remoteCacheProvider, fingerprintOptions) {
6
+ normalizeArgs(args);
7
+ // Use assemble task by default, but bundle if the flag is set
8
+ const buildTaskBase = args.aab ? 'bundle' : 'assemble';
9
+ const tasks = args.tasks ?? [`${buildTaskBase}${toPascalCase(args.variant)}`];
10
+ const artifactName = await formatArtifactName({
11
+ platform: 'android',
12
+ traits: [args.variant],
13
+ root: projectRoot,
14
+ fingerprintOptions,
15
+ });
16
+ const binaryPath = await getBinaryPath({
17
+ artifactName,
18
+ localFlag: args.local,
19
+ remoteCacheProvider,
20
+ fingerprintOptions,
21
+ sourceDir: androidProject.sourceDir,
22
+ });
23
+ if (!binaryPath) {
24
+ await runGradle({ tasks, androidProject, args, artifactName });
25
+ }
26
+ const outputFilePath = binaryPath ?? (await findOutputFile(androidProject, tasks));
27
+ if (outputFilePath) {
28
+ logger.log(`Build available at: ${colorLink(relativeToCwd(outputFilePath))}`);
29
+ }
30
+ outro('Success 🎉.');
31
+ }
32
+ function normalizeArgs(args) {
33
+ if (args.tasks && args.variant) {
34
+ logger.warn('Both "--tasks" and "--variant" parameters were passed. Using "--tasks" for building the app.');
35
+ }
36
+ if (!args.variant) {
37
+ args.variant = 'debug';
38
+ }
39
+ }
40
+ export const options = [
41
+ {
42
+ name: '--variant <string>',
43
+ description: `Specify your app's build variant, which is constructed from build type and product flavor, e.g. "debug" or "freeRelease".`,
44
+ },
45
+ {
46
+ name: '--aab',
47
+ description: 'Produces an Android App Bundle (AAB) suited for app stores such as Google Play. If not set, APK is created.',
48
+ },
49
+ {
50
+ name: '--tasks <list>',
51
+ description: 'Run custom Gradle tasks. Will override the "--variant" and "--bundle" arguments.',
52
+ parse: (val) => val.split(','),
53
+ },
54
+ {
55
+ name: '--active-arch-only',
56
+ description: 'Build native libraries only for the current device architecture. Set by default in debug builds and interactive environments.',
57
+ },
58
+ {
59
+ name: '--extra-params <string>',
60
+ description: 'Custom params passed to gradle build command',
61
+ parse: parseArgs,
62
+ },
63
+ {
64
+ name: '--local',
65
+ description: 'Force local build with Gradle wrapper.',
66
+ },
67
+ ];
68
+ //# sourceMappingURL=buildAndroid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildAndroid.js","sourceRoot":"","sources":["../../../../../src/lib/commands/buildAndroid/buildAndroid.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EAET,kBAAkB,EAClB,aAAa,EACb,MAAM,EACN,KAAK,EACL,SAAS,EACT,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAWlD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,cAAoC,EACpC,IAAgB,EAChB,WAAmB,EACnB,mBAAgE,EAChE,kBAAsC;IAEtC,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,8DAA8D;IAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAAC;QAC5C,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;QACtB,IAAI,EAAE,WAAW;QACjB,kBAAkB;KACnB,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC;QACrC,YAAY;QACZ,SAAS,EAAE,IAAI,CAAC,KAAK;QACrB,mBAAmB;QACnB,kBAAkB;QAClB,SAAS,EAAE,cAAc,CAAC,SAAS;KACpC,CAAC,CAAC;IACH,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,cAAc,GAClB,UAAU,IAAI,CAAC,MAAM,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;IAE9D,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,CACR,uBAAuB,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,EAAE,CAClE,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,aAAa,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,aAAa,CAAC,IAAgB;IACrC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CACT,8FAA8F,CAC/F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,2HAA2H;KACzI;IACD;QACE,IAAI,EAAE,OAAO;QACb,WAAW,EACT,6GAA6G;KAChH;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,kFAAkF;QACpF,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;KACvC;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,+HAA+H;KAClI;IACD;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,8CAA8C;QAC3D,KAAK,EAAE,SAAS;KACjB;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,wCAAwC;KACtD;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AndroidProjectConfig } from '@react-native-community/cli-types';
2
+ import type { PluginApi } from '@rock-js/config';
3
+ export declare function registerBuildCommand(api: PluginApi, pluginConfig: Partial<AndroidProjectConfig> | undefined): void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../../src/lib/commands/buildAndroid/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAK9C,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,oBAAoB,GAAG,SAAS,QAoB/C"}
@@ -0,0 +1,14 @@
1
+ import { getValidProjectConfig } from '../getValidProjectConfig.js';
2
+ import { buildAndroid, options } from './buildAndroid.js';
3
+ export function registerBuildCommand(api, pluginConfig) {
4
+ api.registerCommand({
5
+ name: 'build:android',
6
+ description: 'Builds your app for Android platform.',
7
+ action: async (args) => {
8
+ const androidConfig = getValidProjectConfig(api.getProjectRoot(), pluginConfig);
9
+ await buildAndroid(androidConfig, args, api.getProjectRoot(), await api.getRemoteCacheProvider(), api.getFingerprintOptions());
10
+ },
11
+ options: options,
12
+ });
13
+ }
14
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../../../src/lib/commands/buildAndroid/command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,UAAU,oBAAoB,CAClC,GAAc,EACd,YAAuD;IAEvD,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,uCAAuC;QACpD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACrB,MAAM,aAAa,GAAG,qBAAqB,CACzC,GAAG,CAAC,cAAc,EAAE,EACpB,YAAY,CACb,CAAC;YACF,MAAM,YAAY,CAChB,aAAa,EACb,IAAkB,EAClB,GAAG,CAAC,cAAc,EAAE,EACpB,MAAM,GAAG,CAAC,sBAAsB,EAAE,EAClC,GAAG,CAAC,qBAAqB,EAAE,CAC5B,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { AndroidProjectConfig } from '@react-native-community/cli-types';
2
+ import type { PluginApi } from '@rock-js/config';
3
+ export declare function registerCreateKeystoreCommand(api: PluginApi, pluginConfig: Partial<AndroidProjectConfig> | undefined): void;
4
+ export declare function generateKeystore(androidProject: AndroidProjectConfig, args: Flags): Promise<void>;
5
+ type Flags = {
6
+ name?: string;
7
+ alias?: string;
8
+ };
9
+ export declare const generateKeystoreOptions: {
10
+ name: string;
11
+ description: string;
12
+ }[];
13
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateKeystore.d.ts","sourceRoot":"","sources":["../../../../src/lib/commands/generateKeystore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAe9C,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,oBAAoB,GAAG,SAAS,QAc/C;AAED,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,oBAAoB,EACpC,IAAI,EAAE,KAAK,iBAKZ;AAED,KAAK,KAAK,GAAG;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA6EF,eAAO,MAAM,uBAAuB;;;GASnC,CAAC"}
@@ -0,0 +1,80 @@
1
+ import path from 'node:path';
2
+ import { color, colorLink, intro, logger, outro, promptGroup, promptText, RockError, spawn, } from '@rock-js/tools';
3
+ import { getValidProjectConfig } from './getValidProjectConfig.js';
4
+ export function registerCreateKeystoreCommand(api, pluginConfig) {
5
+ api.registerCommand({
6
+ name: 'create-keystore:android',
7
+ description: 'Creates a keystore file for signing Android release builds.',
8
+ action: async (args) => {
9
+ const androidConfig = getValidProjectConfig(api.getProjectRoot(), pluginConfig);
10
+ await generateKeystore(androidConfig, args);
11
+ },
12
+ options: generateKeystoreOptions,
13
+ });
14
+ }
15
+ export async function generateKeystore(androidProject, args) {
16
+ intro('Generate a keystore file for signing Android release builds.');
17
+ await runKeytool(androidProject, args);
18
+ outro('Success 🎉.');
19
+ }
20
+ async function runKeytool(androidProject, args) {
21
+ const { name, alias } = await prompts({ name: args.name, alias: args.alias });
22
+ const keystoreOutputPath = path.join(androidProject.sourceDir, androidProject.appName, `${name}.keystore`);
23
+ logger.info(`Running "keytool" command. You'll be further prompted for password and extra information.`);
24
+ logger.log('');
25
+ try {
26
+ // keytool -genkey -v -keystore release.keystore -alias rock-alias -keyalg RSA -keysize 2048 -validity 10000
27
+ await spawn('keytool', [
28
+ '-genkey',
29
+ '-v',
30
+ '-keystore',
31
+ keystoreOutputPath,
32
+ '-alias',
33
+ alias,
34
+ '-keyalg',
35
+ 'RSA',
36
+ '-keysize',
37
+ '2048',
38
+ '-validity',
39
+ '10000',
40
+ ], { stdio: 'inherit' });
41
+ logger.success(`Keystore generated at: ${colorLink(keystoreOutputPath)}`);
42
+ logger.warn(`Edit the ${colorLink('~/.gradle/gradle.properties')} or ${colorLink('./android/gradle.properties')} file, and add the following (replace ***** with the correct keystore password):`);
43
+ // use console log to make it easy to copy-paste without messing with "|" characters injected by `logger.log`
44
+ console.log(color.yellow(`
45
+ ROCK_UPLOAD_STORE_FILE=release.keystore
46
+ ROCK_UPLOAD_KEY_ALIAS=rock-alias
47
+ ROCK_UPLOAD_STORE_PASSWORD=*****
48
+ ROCK_UPLOAD_KEY_PASSWORD=*****`));
49
+ }
50
+ catch (error) {
51
+ throw new RockError(`Failed to generate keystore. Please try manually by following instructions at: ${colorLink('https://reactnative.dev/docs/signed-apk-android')}`, { cause: error.stderr });
52
+ }
53
+ }
54
+ async function prompts({ name, alias }) {
55
+ return promptGroup({
56
+ name: () => name
57
+ ? Promise.resolve(name)
58
+ : promptText({
59
+ message: 'Provide keystore name',
60
+ initialValue: 'release',
61
+ }),
62
+ alias: () => alias
63
+ ? Promise.resolve(alias)
64
+ : promptText({
65
+ message: 'Provide keystore alias',
66
+ initialValue: 'rock-alias',
67
+ }),
68
+ });
69
+ }
70
+ export const generateKeystoreOptions = [
71
+ {
72
+ name: '--name <string>',
73
+ description: 'Name of the keystore file.',
74
+ },
75
+ {
76
+ name: '--alias <string>',
77
+ description: 'Alias for the key.',
78
+ },
79
+ ];
80
+ //# sourceMappingURL=generateKeystore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateKeystore.js","sourceRoot":"","sources":["../../../../src/lib/commands/generateKeystore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { AndroidProjectConfig } from '@react-native-community/cli-types';
2
+ export declare function getValidProjectConfig(projectRoot: string, pluginConfig?: Partial<AndroidProjectConfig>): AndroidProjectConfig;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getValidProjectConfig.d.ts","sourceRoot":"","sources":["../../../../src/lib/commands/getValidProjectConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAG9E,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,oBAAoB,wBAOpC"}
@@ -0,0 +1,10 @@
1
+ import { projectConfig } from '@react-native-community/cli-config-android';
2
+ import { RockError } from '@rock-js/tools';
3
+ export function getValidProjectConfig(projectRoot, pluginConfig) {
4
+ const androidConfig = projectConfig(projectRoot, pluginConfig);
5
+ if (!androidConfig) {
6
+ throw new RockError('Android project not found.');
7
+ }
8
+ return androidConfig;
9
+ }
10
+ //# sourceMappingURL=getValidProjectConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getValidProjectConfig.js","sourceRoot":"","sources":["../../../../src/lib/commands/getValidProjectConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,UAAU,qBAAqB,CACnC,WAAmB,EACnB,YAA4C;IAE5C,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC/D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function getAdbPath(): string;
2
+ /**
3
+ * Executes the commands needed to get a list of devices from ADB
4
+ */
5
+ export declare function getDevices(): Promise<string[]>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adb.d.ts","sourceRoot":"","sources":["../../../../../src/lib/commands/runAndroid/adb.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,WAIzB;AAuBD;;GAEG;AACH,wBAAsB,UAAU,sBAQ/B"}
@@ -0,0 +1,38 @@
1
+ import path from 'node:path';
2
+ import { spawn } from '@rock-js/tools';
3
+ export function getAdbPath() {
4
+ return process.env['ANDROID_HOME']
5
+ ? path.join(process.env['ANDROID_HOME'], 'platform-tools', 'adb')
6
+ : 'adb';
7
+ }
8
+ /**
9
+ * Parses the output of the 'adb devices' command
10
+ */
11
+ function parseDevicesResult(result) {
12
+ if (!result) {
13
+ return [];
14
+ }
15
+ const devices = [];
16
+ const lines = result.trim().split(/\r?\n/);
17
+ for (let i = 0; i < lines.length; i++) {
18
+ const words = lines[i].split(/[ ,\t]+/).filter((w) => w !== '');
19
+ if (words[1] === 'device') {
20
+ devices.push(words[0]);
21
+ }
22
+ }
23
+ return devices;
24
+ }
25
+ /**
26
+ * Executes the commands needed to get a list of devices from ADB
27
+ */
28
+ export async function getDevices() {
29
+ const adbPath = getAdbPath();
30
+ try {
31
+ const { output } = await spawn(adbPath, ['devices'], { stdio: 'pipe' });
32
+ return parseDevicesResult(output);
33
+ }
34
+ catch {
35
+ return [];
36
+ }
37
+ }
38
+ //# sourceMappingURL=adb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adb.js","sourceRoot":"","sources":["../../../../../src/lib/commands/runAndroid/adb.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAChC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC;QACjE,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,MAAc;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAEhE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AndroidProjectConfig } from '@react-native-community/cli-types';
2
+ import type { PluginApi } from '@rock-js/config';
3
+ export declare function registerRunCommand(api: PluginApi, pluginConfig: Partial<AndroidProjectConfig> | undefined): void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../../src/lib/commands/runAndroid/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAK9C,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,oBAAoB,GAAG,SAAS,QAmB/C"}
@@ -0,0 +1,15 @@
1
+ import { getValidProjectConfig } from '../getValidProjectConfig.js';
2
+ import { runAndroid, runOptions } from './runAndroid.js';
3
+ export function registerRunCommand(api, pluginConfig) {
4
+ api.registerCommand({
5
+ name: 'run:android',
6
+ description: 'Builds your app and starts it on a connected Android emulator or a device.',
7
+ action: async (args) => {
8
+ const projectRoot = api.getProjectRoot();
9
+ const androidConfig = getValidProjectConfig(projectRoot, pluginConfig);
10
+ await runAndroid(androidConfig, args, projectRoot, await api.getRemoteCacheProvider(), api.getFingerprintOptions());
11
+ },
12
+ options: runOptions,
13
+ });
14
+ }
15
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../../../src/lib/commands/runAndroid/command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,UAAU,kBAAkB,CAChC,GAAc,EACd,YAAuD;IAEvD,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,4EAA4E;QAC9E,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACrB,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;YACzC,MAAM,aAAa,GAAG,qBAAqB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACvE,MAAM,UAAU,CACd,aAAa,EACb,IAAa,EACb,WAAW,EACX,MAAM,GAAG,CAAC,sBAAsB,EAAE,EAClC,GAAG,CAAC,qBAAqB,EAAE,CAC5B,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,UAAU;KACpB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { AndroidProject } from './runAndroid.js';
2
+ export declare function findOutputFile(androidProject: AndroidProject, tasks: string[], device?: string): Promise<string | false | undefined>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findOutputFile.d.ts","sourceRoot":"","sources":["../../../../../src/lib/commands/runAndroid/findOutputFile.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,wBAAsB,cAAc,CAClC,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,CAAC,EAAE,MAAM,uCAiChB"}
@@ -0,0 +1,67 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { logger, spawn } from '@rock-js/tools';
3
+ import { getAdbPath } from './adb.js';
4
+ export async function findOutputFile(androidProject, tasks, device) {
5
+ const { appName, sourceDir } = androidProject;
6
+ const selectedTask = tasks.find((t) => t.startsWith('install') ||
7
+ t.startsWith('assemble') ||
8
+ t.startsWith('bundle'));
9
+ if (!selectedTask) {
10
+ return false;
11
+ }
12
+ // handle if selected task includes build flavour as well, eg. installProductionDebug should create ['production','debug'] array
13
+ const variantFromSelectedTask = selectedTask
14
+ ?.replace('install', '')
15
+ ?.replace('assemble', '')
16
+ ?.replace('bundle', '')
17
+ .split(/(?=[A-Z])/);
18
+ // create path to output file, eg. `production/debug`
19
+ const variantPath = variantFromSelectedTask?.join('/')?.toLowerCase();
20
+ // create output file name, eg. `production-debug`
21
+ const variantAppName = variantFromSelectedTask?.join('-')?.toLowerCase();
22
+ const apkOrBundle = selectedTask?.includes('bundle') ? 'bundle' : 'apk';
23
+ const buildDirectory = `${sourceDir}/${appName}/build/outputs/${apkOrBundle}/${variantPath}`;
24
+ const outputFile = await getInstallOutputFileName(appName, variantAppName, buildDirectory, apkOrBundle === 'apk' ? 'apk' : 'aab', device);
25
+ return outputFile ? `${buildDirectory}/${outputFile}` : undefined;
26
+ }
27
+ async function getInstallOutputFileName(appName, variant, buildDirectory, apkOrAab, device) {
28
+ const availableCPUs = await getAvailableCPUs(device);
29
+ // check if there is an apk file like app-armeabi-v7a-debug.apk
30
+ for (const availableCPU of availableCPUs.concat('universal')) {
31
+ const outputFile = `${appName}-${availableCPU}-${variant}.${apkOrAab}`;
32
+ if (existsSync(`${buildDirectory}/${outputFile}`)) {
33
+ return outputFile;
34
+ }
35
+ }
36
+ // check if there is a default file like app-debug.apk
37
+ const outputFile = `${appName}-${variant}.${apkOrAab}`;
38
+ if (existsSync(`${buildDirectory}/${outputFile}`)) {
39
+ return outputFile;
40
+ }
41
+ logger.debug('Could not find the output file:', {
42
+ buildDirectory,
43
+ outputFile,
44
+ appName,
45
+ variant,
46
+ apkOrAab,
47
+ });
48
+ return undefined;
49
+ }
50
+ /**
51
+ * Gets available CPUs of devices from ADB
52
+ */
53
+ async function getAvailableCPUs(device) {
54
+ const adbPath = getAdbPath();
55
+ try {
56
+ const adbArgs = ['shell', 'getprop', 'ro.product.cpu.abilist'];
57
+ if (device) {
58
+ adbArgs.unshift('-s', device);
59
+ }
60
+ const { output } = await spawn(adbPath, adbArgs, { stdio: 'pipe' });
61
+ return output.trim().split(',');
62
+ }
63
+ catch {
64
+ return [];
65
+ }
66
+ }
67
+ //# sourceMappingURL=findOutputFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findOutputFile.js","sourceRoot":"","sources":["../../../../../src/lib/commands/runAndroid/findOutputFile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type DeviceData = {
2
+ deviceId: string | undefined;
3
+ readableName: string;
4
+ connected: boolean;
5
+ type: 'emulator' | 'phone';
6
+ };
7
+ export declare function listAndroidDevices(): Promise<DeviceData[]>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listAndroidDevices.d.ts","sourceRoot":"","sources":["../../../../../src/lib/commands/runAndroid/listAndroidDevices.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;CAC5B,CAAC;AAqCF,wBAAsB,kBAAkB,0BA2CvC"}