@@ -6,16 +6,33 @@ import {
66 spinner ,
77 type SubprocessError ,
88} from '@rnef/tools' ;
9+ import type { AarProject , PackageAarFlags } from './aar/packageAar.js' ;
10+ import type { PublishLocalAarFlags } from './aar/publishLocalAar.js' ;
911import type { BuildFlags } from './buildAndroid/buildAndroid.js' ;
1012import { getAdbPath , getDevices } from './runAndroid/adb.js' ;
1113import type { AndroidProject , Flags } from './runAndroid/runAndroid.js' ;
1214
15+ type RunGradleAarArgs = {
16+ tasks : string [ ] ;
17+ aarProject : AarProject ;
18+ args : PackageAarFlags | PublishLocalAarFlags ;
19+ isPublishTask ?: boolean ;
20+ } ;
21+
1322export type RunGradleArgs = {
1423 tasks : string [ ] ;
1524 androidProject : AndroidProject ;
1625 args : BuildFlags | Flags ;
1726} ;
1827
28+ const getCleanedErrorMessage = ( error : SubprocessError ) => {
29+ return error . stderr
30+ . split ( '\n' )
31+ . filter ( ( line ) => ! gradleLinesToRemove . some ( ( l ) => line . includes ( l ) ) )
32+ . join ( '\n' )
33+ . trim ( ) ;
34+ } ;
35+
1936export async function runGradle ( {
2037 tasks,
2138 androidProject,
@@ -69,11 +86,9 @@ export async function runGradle({
6986 ) ;
7087 } catch ( error ) {
7188 loader . stop ( 'Failed to build the app' ) ;
72- const cleanedErrorMessage = ( error as SubprocessError ) . stderr
73- . split ( '\n' )
74- . filter ( ( line ) => ! gradleLinesToRemove . some ( ( l ) => line . includes ( l ) ) )
75- . join ( '\n' )
76- . trim ( ) ;
89+ const cleanedErrorMessage = getCleanedErrorMessage (
90+ error as SubprocessError
91+ ) ;
7792
7893 if ( cleanedErrorMessage ) {
7994 logger . error ( cleanedErrorMessage ) ;
@@ -87,6 +102,61 @@ export async function runGradle({
87102 }
88103}
89104
105+ export async function runGradleAar ( {
106+ tasks,
107+ aarProject,
108+ args,
109+ isPublishTask = false ,
110+ } : RunGradleAarArgs ) {
111+ if ( 'binaryPath' in args ) {
112+ return ;
113+ }
114+ const loader = spinner ( { indicator : 'timer' } ) ;
115+ const message = isPublishTask
116+ ? 'Publishing the AAR'
117+ : // @ts -expect-error args.variant is not set for publish task
118+ `Building the AAR with Gradle in ${ args . variant } build variant` ;
119+
120+ loader . start ( message ) ;
121+ const gradleArgs = getTaskNames ( aarProject . moduleName , tasks ) ;
122+
123+ gradleArgs . push ( '-x' , 'lint' ) ;
124+
125+ const gradleWrapper = getGradleWrapper ( ) ;
126+
127+ try {
128+ logger . debug ( `Running ${ gradleWrapper } ${ gradleArgs . join ( ' ' ) } .` ) ;
129+ await spawn ( gradleWrapper , gradleArgs , {
130+ cwd : aarProject . sourceDir ,
131+ stdio : logger . isVerbose ( ) ? 'inherit' : 'pipe' ,
132+ } ) ;
133+ loader . stop (
134+ isPublishTask
135+ ? 'Published the AAR to local maven (~/.m2/repository)'
136+ : // @ts -expect-error args.variant is not set for publish task
137+ `Built the AAR in ${ args . variant } build variant.`
138+ ) ;
139+ } catch ( error ) {
140+ loader . stop ( `Failed to ${ isPublishTask ? 'publish' : 'build' } the AAR` ) ;
141+ const cleanedErrorMessage = getCleanedErrorMessage (
142+ error as SubprocessError
143+ ) ;
144+
145+ if ( cleanedErrorMessage ) {
146+ logger . error ( cleanedErrorMessage ) ;
147+ }
148+
149+ const hints = getErrorHints ( ( error as SubprocessError ) . stdout ?? '' ) ;
150+ throw new RnefError (
151+ hints ||
152+ `Failed to ${
153+ isPublishTask ? 'publish' : 'build'
154+ } the AAR. See the error above for details from Gradle.`,
155+ { cause : ( error as SubprocessError ) . stderr }
156+ ) ;
157+ }
158+ }
159+
90160function getErrorHints ( output : string ) {
91161 const signingMessage = output . includes ( 'validateSigningRelease FAILED' )
92162 ? `Hint: You can run "${ color . bold (
0 commit comments