2026-05-14 01:25:54 +08:00
|
|
|
const {
|
|
|
|
|
withAppBuildGradle,
|
|
|
|
|
withProjectBuildGradle,
|
2026-05-25 14:08:03 +08:00
|
|
|
withSettingsGradle,
|
2026-05-14 01:25:54 +08:00
|
|
|
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;
|