|
1 | 1 | import * as path from "path"; |
2 | 2 | import { MANIFEST_FILE_NAME, INCLUDE_GRADLE_NAME, ASSETS_DIR, RESOURCES_DIR } from "../constants"; |
3 | | -import { getShortPluginName } from "../common/helpers"; |
| 3 | +import { getShortPluginName, hook } from "../common/helpers"; |
4 | 4 | import { Builder, parseString } from "xml2js"; |
5 | 5 | import { ILogger } from "log4js"; |
6 | 6 |
|
7 | 7 | export class AndroidPluginBuildService implements IAndroidPluginBuildService { |
8 | 8 |
|
9 | | - constructor(private $fs: IFileSystem, |
| 9 | + /** |
| 10 | + * Required for hooks execution to work. |
| 11 | + */ |
| 12 | + private get $hooksService(): IHooksService { |
| 13 | + return this.$injector.resolve("hooksService"); |
| 14 | + } |
| 15 | + |
| 16 | + constructor(private $injector: IInjector, |
| 17 | + private $fs: IFileSystem, |
10 | 18 | private $childProcess: IChildProcess, |
11 | 19 | private $hostInfo: IHostInfo, |
12 | 20 | private $androidToolsInfo: IAndroidToolsInfo, |
@@ -240,30 +248,9 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService { |
240 | 248 | } |
241 | 249 |
|
242 | 250 | // finally build the plugin |
243 | | - const gradlew = this.$hostInfo.isWindows ? "gradlew.bat" : "./gradlew"; |
244 | | - const localArgs = [ |
245 | | - gradlew, |
246 | | - "-p", |
247 | | - newPluginDir, |
248 | | - "assembleRelease" |
249 | | - ]; |
250 | | - |
251 | 251 | this.$androidToolsInfo.validateInfo({ showWarningsAsErrors: true, validateTargetSdk: true }); |
252 | | - |
253 | 252 | const androidToolsInfo = this.$androidToolsInfo.getToolsInfo(); |
254 | | - const compileSdk = androidToolsInfo.compileSdkVersion; |
255 | | - const buildToolsVersion = androidToolsInfo.buildToolsVersion; |
256 | | - const supportVersion = androidToolsInfo.supportRepositoryVersion; |
257 | | - |
258 | | - localArgs.push(`-PcompileSdk=android-${compileSdk}`); |
259 | | - localArgs.push(`-PbuildToolsVersion=${buildToolsVersion}`); |
260 | | - localArgs.push(`-PsupportVersion=${supportVersion}`); |
261 | | - |
262 | | - try { |
263 | | - await this.$childProcess.exec(localArgs.join(" "), { cwd: newPluginDir }); |
264 | | - } catch (err) { |
265 | | - throw new Error(`Failed to build plugin ${options.pluginName} : \n${err}`); |
266 | | - } |
| 253 | + await this.buildPlugin( { pluginDir: newPluginDir, pluginName: options.pluginName, androidToolsInfo }); |
267 | 254 |
|
268 | 255 | const finalAarName = `${shortPluginName}-release.aar`; |
269 | 256 | const pathToBuiltAar = path.join(newPluginDir, "build", "outputs", "aar", finalAarName); |
@@ -318,6 +305,26 @@ export class AndroidPluginBuildService implements IAndroidPluginBuildService { |
318 | 305 | return false; |
319 | 306 | } |
320 | 307 |
|
| 308 | + @hook("buildAndroidPlugin") |
| 309 | + private async buildPlugin(pluginBuildSettings: IBuildAndroidPluginData): Promise<void> { |
| 310 | + const gradlew = this.$hostInfo.isWindows ? "gradlew.bat" : "./gradlew"; |
| 311 | + |
| 312 | + const localArgs = [ |
| 313 | + "-p", |
| 314 | + pluginBuildSettings.pluginDir, |
| 315 | + "assembleRelease", |
| 316 | + `-PcompileSdk=android-${pluginBuildSettings.androidToolsInfo.compileSdkVersion}`, |
| 317 | + `-PbuildToolsVersion=${pluginBuildSettings.androidToolsInfo.buildToolsVersion}`, |
| 318 | + `-PsupportVersion=${pluginBuildSettings.androidToolsInfo.supportRepositoryVersion}` |
| 319 | + ]; |
| 320 | + |
| 321 | + try { |
| 322 | + await this.$childProcess.spawnFromEvent(gradlew, localArgs, "close", { cwd: pluginBuildSettings.pluginDir }); |
| 323 | + } catch (err) { |
| 324 | + throw new Error(`Failed to build plugin ${pluginBuildSettings.pluginName} : \n${err}`); |
| 325 | + } |
| 326 | + } |
| 327 | + |
321 | 328 | private validateOptions(options: IBuildOptions): void { |
322 | 329 | if (!options) { |
323 | 330 | throw new Error("Android plugin cannot be built without passing an 'options' object."); |
|
0 commit comments