Files
Schnappix/plugins/withProguardRules.js

46 lines
1.5 KiB
JavaScript

const { withDangerousMod } = require('@expo/config-plugins');
const fs = require('fs');
const path = require('path');
const withProguardRules = (config) => {
return withDangerousMod(config, [
'android',
async (config) => {
const proguardPath = path.join(config.modRequest.platformProjectRoot, 'app', 'proguard-rules.pro');
const customRules = `
# Keep ausbc and UVCCamera classes for JNI
-keep class com.serenegiant.usb.** { *; }
-keepclassmembers class com.serenegiant.usb.** { *; }
-keep class com.jiangdg.ausbc.** { *; }
-keepclassmembers class com.jiangdg.ausbc.** { *; }
# Keep custom Expo native modules
-keep class expo.modules.kioskmode.** { *; }
-keepclassmembers class expo.modules.kioskmode.** { *; }
-keep class expo.modules.usbcamera.** { *; }
-keepclassmembers class expo.modules.usbcamera.** { *; }
# Fix for R8 missing class errors with ausbc's optional Glide WebP integration
-dontwarn com.bumptech.glide.integration.webp.**
-keep class com.bumptech.glide.integration.webp.** { *; }
# Fix for R8 missing class errors when excluding unused libnative MP3/YUV module
-dontwarn com.jiangdg.natives.**
-dontwarn com.elvishew.xlog.**
-dontwarn com.serenegiant.utils.**
`;
if (fs.existsSync(proguardPath)) {
let content = fs.readFileSync(proguardPath, 'utf8');
if (!content.includes('com.serenegiant.usb')) {
fs.appendFileSync(proguardPath, customRules);
}
} else {
fs.writeFileSync(proguardPath, customRules);
}
return config;
},
]);
};
module.exports = withProguardRules;