我正在尝试使用 lib react-native-obfuscator 来混淆我的 JS 代码。我需要在代码中隐藏 API 密钥,但出现以下错误:
error src/services/api.js: function (prevType) {
this.state.exprAllowed = false;
if (prevType === types._let || prevType === types._c...<omitted>...
} could not be cloned. Run CLI with --verbose flag for more details.
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:bundleReleaseJsAndAssets'.
Run Code Online (Sandbox Code Playgroud)
当我不混淆文件“src/services/api.js”时,我得到了想要的结果,但这是最重要的。我的transform.js 文件是:
const obfuscatingTransformer = require("react-native-obfuscator")
const filter = filename => {
return filename.startsWith("src");
}
module.exports = obfuscatingTransformer({
obfuscatorOptions:{
compact: true, // default true
controlFlowFlattening: false, // default false
controlFlowFlatteningThreshold: 0.75, // default 0.75
deadCodeInjection: false, // default false
deadCodeInjectionThreshold: 1, // default 0.4
debugProtection: false, // default false
debugProtectionInterval: false, // default false
disableConsoleOutput: true,
identifierNamesGenerator: 'hexadecimal', // default hexadecimal
log: false, // default false
renameGlobals: true, // default false
rotateStringArray: true, // default true
seed: 0,// default 0
selfDefending: false, // default true: not working if true
shuffleStringArray: true, // default true
sourceMapMode: 'separate', // default seperate
splitStrings: true, // default false
splitStringsChunckLength: 10, // default 10
stringArray: true, // default true
stringArrayEncoding: 'rc4', // default false
stringArrayThreshold: 0.75, // default 0.8
target: 'browser', // default browser
transformObjectKeys: true, // default false
unicodeEscapeSequence: true
},
upstreamTransformer: require('metro-react-native-babel-transformer'),
emitObfuscatedFiles: false,
enableInDevelopment: false,
filter: filter,
trace: true
Run Code Online (Sandbox Code Playgroud)
})
有人可以帮我吗?先感谢您
我尝试过react-native-obfuscator,但它有很多问题。
所以我正在使用obfuscator-io-metro-plugin它并且效果很好。
这里我把我的设置贴出来给大家看看。
添加metro.config.js以下内容,它将obfuscator所有字符串和js代码相关的文件。
const jsoMetroPlugin = require("obfuscator-io-metro-plugin")(
{
compact: false,
sourceMap: true,
controlFlowFlattening: true,
controlFlowFlatteningThreshold: 1,
numbersToExpressions: true,
simplify: true,
shuffleStringArray: true,
splitStrings: true,
stringArrayThreshold: 1,
},
{
runInDev: false /* optional */,
logObfuscatedFiles: true /* optional generated files will be located at ./.jso */,
sourceMapLocation:
"./index.android.bundle.map" /* optional only works if sourceMap: true in obfuscation option */,
}
);
module.exports = {
transformer: {
assetPlugins: ['expo-asset/tools/hashAssetFiles'],
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: false,
},
}),
},
...jsoMetroPlugin
};
Run Code Online (Sandbox Code Playgroud)
并且不要忘记将以下内容包含在您的 github.ignore文件中,这样如果您正在使用它,就不会被签入sourceMap
index.android.bundle.map
.jso/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1437 次 |
| 最近记录: |