特定文件的反应本机混淆器崩溃

fer*_*tti 1 react-native

我正在尝试使用 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)

})

有人可以帮我吗?先感谢您

Ale*_*oma 6

我尝试过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)