>

Proguard를 통합 한 후 Rhino API에 문제가 있습니다.

보호없이, 아래 코드가 정상적으로 작동합니다.

org.mozilla.javascript.Context context = org.mozilla.javascript.Context.enter();
context.setOptimizationLevel(-1);
ScriptableObject scope = context.initStandardObjects();
try {
    InputStream inputStream = mContext.getAssets().open(JAVASCRIPT_FILE);
    InputStreamReader reader = new InputStreamReader(inputStream);
    context.evaluateReader(scope, reader, JAVASCRIPT_FILE, 1, null);
} catch (IOException exception) {
    throw new CustomException(null, exception);
}
Function functionAdd = (Function) scope.get(JAVASCRIPT_FUNCTION_NAME);
Object returnObject = functionAdd.call(context, scope, scope, new Object[] {
    parameter1, parameter2, parameter3
});

그러나 Proguard를 통합 한 후 오류가 발생합니다 :

02-26 14:58:13.200: E/AndroidRuntime(11607): Caused by: java.lang.IllegalStateException: Failed to create VMBridge instance
02-26 14:58:13.200: E/AndroidRuntime(11607): at org.a.b.ds.<clinit>(Unknown Source)
02-26 14:58:13.200: E/AndroidRuntime(11607): ... 11 more

  • 답변 # 1

    Proguard는 명시 적으로 지시하지 않는 한 rhino 라이브러리 클래스를 난독 처리합니다. Selvin이 지적한 것처럼 특히 VMBridge.java 클래스가 영향을받습니다.

    코뿔소 라이브러리 클래스가 난독 화되지 않도록 유지하면 문제가 해결됩니다. 다음과 같은 proguard 예외를 사용하십시오.

    -keep class org.mozilla.javascript.** { *; }
    
    

  • 이전 Javascript에서 두 변수의 숫자 값을 함께 추가하는 방법
  • 다음 문제 세트 6 cs50을 완료하기 위해 한 가지 누락