ci(android): add Android NDK caching and installation to build workflow
This commit is contained in:
110
plugins/withHuaweiPush.js
Normal file
110
plugins/withHuaweiPush.js
Normal file
@@ -0,0 +1,110 @@
|
||||
const {
|
||||
withAppBuildGradle,
|
||||
withProjectBuildGradle,
|
||||
withDangerousMod,
|
||||
withAndroidManifest,
|
||||
} = require('@expo/config-plugins');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const withHuaweiPush = (config, options = {}) => {
|
||||
const { jpushVersion = '5.8.0' } = options;
|
||||
|
||||
config = withProjectBuildGradle(config, (config) => {
|
||||
const contents = config.modResults.contents;
|
||||
|
||||
if (!contents.includes('developer.huawei.com/repo')) {
|
||||
config.modResults.contents = contents.replace(
|
||||
/(repositories\s*\{)/g,
|
||||
(match) => {
|
||||
return match + `\n maven { url 'https://developer.huawei.com/repo/' }`;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return config;
|
||||
});
|
||||
|
||||
config = withProjectBuildGradle(config, (config) => {
|
||||
const contents = config.modResults.contents;
|
||||
|
||||
if (!contents.includes('com.huawei.agconnect:agcp')) {
|
||||
if (contents.includes('buildscript')) {
|
||||
const depsPattern = /(buildscript\s*\{[\s\S]*?dependencies\s*\{)/;
|
||||
if (depsPattern.test(contents)) {
|
||||
config.modResults.contents = contents.replace(
|
||||
depsPattern,
|
||||
`$1\n classpath 'com.huawei.agconnect:agcp:1.9.1.301'`
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return config;
|
||||
});
|
||||
|
||||
config = withAppBuildGradle(config, (config) => {
|
||||
const contents = config.modResults.contents;
|
||||
|
||||
if (!contents.includes('com.huawei.agconnect')) {
|
||||
const applyPluginPattern = /apply plugin:\s*['"]com\.google\.gms\.google-services['"]/;
|
||||
if (applyPluginPattern.test(contents)) {
|
||||
config.modResults.contents = contents.replace(
|
||||
applyPluginPattern,
|
||||
`apply plugin: 'com.google.gms.google-services'\napply plugin: 'com.huawei.agconnect'`
|
||||
);
|
||||
} else {
|
||||
const lastApplyPlugin = /apply plugin:[^\n]*(?:\n)/g;
|
||||
const matches = contents.match(lastApplyPlugin);
|
||||
if (matches && matches.length > 0) {
|
||||
const lastMatch = matches[matches.length - 1];
|
||||
const lastIndex = contents.lastIndexOf(lastMatch);
|
||||
config.modResults.contents =
|
||||
contents.slice(0, lastIndex + lastMatch.length) +
|
||||
"apply plugin: 'com.huawei.agconnect'\n" +
|
||||
contents.slice(lastIndex + lastMatch.length);
|
||||
} else {
|
||||
config.modResults.contents = contents + "\napply plugin: 'com.huawei.agconnect'\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!contents.includes('cn.jiguang.sdk.plugin:huawei')) {
|
||||
const depsPattern = /dependencies\s*\{/;
|
||||
if (depsPattern.test(config.modResults.contents)) {
|
||||
config.modResults.contents = config.modResults.contents.replace(
|
||||
depsPattern,
|
||||
`dependencies {\n implementation 'cn.jiguang.sdk.plugin:huawei:${jpushVersion}'`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return config;
|
||||
});
|
||||
|
||||
config = withDangerousMod(config, [
|
||||
'android',
|
||||
async (config) => {
|
||||
const appDir = path.join(config.modRequest.platformProjectRoot, 'app');
|
||||
const srcFile = path.join(config.modRequest.projectRoot, 'plugins', 'agconnect-services.json');
|
||||
const destFile = path.join(appDir, 'agconnect-services.json');
|
||||
|
||||
if (fs.existsSync(srcFile)) {
|
||||
fs.copyFileSync(srcFile, destFile);
|
||||
console.log('[withHuaweiPush] copied agconnect-services.json to android/app/');
|
||||
} else {
|
||||
console.warn('[withHuaweiPush] agconnect-services.json not found at project root');
|
||||
}
|
||||
|
||||
return config;
|
||||
},
|
||||
]);
|
||||
|
||||
config = withAndroidManifest(config, (config) => {
|
||||
return config;
|
||||
});
|
||||
|
||||
return config;
|
||||
};
|
||||
|
||||
module.exports = withHuaweiPush;
|
||||
Reference in New Issue
Block a user