|
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