如何解决来自 react-native-code-push 的 android 编译错误 'cant find symbol'
How to resolve android compile error 'cant find symbol' from react-native-code-push
不确定这里的问题是什么。在 Microsoft appcenter 上 building/distributing 时构建没有问题。我记得在成功构建后唯一与代码推送相关的事情是将不同的部署密钥添加到 build.gradle:
buildTypes {
debug {
signingConfig signingConfigs.debug
// Note: CodePush updates should not be tested in Debug mode as they are overriden by the RN packager. However, because CodePush checks for updates in all modes, we must supply a key.
// specifically left blank in appcenter docs
resValue "string", "CodePushDeploymentKey", '""'
}
releaseStaging {
resValue "string", "CodePushDeploymentKey", '"<key>"'
// Note: It is a good idea to provide matchingFallbacks for the new buildType you create to prevent build issues
// Add the following line if not already there
matchingFallbacks = ['release']
}
release {
// Caution! In production, you need to generate your own keystore file.
// see https://facebook.github.io/react-native/docs/signed-apk-android.
// signingConfig signingConfigs.release
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
resValue "string", "CodePushDeploymentKey", '"<key>"'
}
}
现在,当我尝试在 android studio 中进行构建时,出现此错误:
> Task :react-native-code-push:javaPreCompileDebug UP-TO-DATE
> Task :react-native-code-push:compileDebugJavaWithJavac FAILED
/Users/vorousjames/Desktop/Development/Slide/Slide/node_modules/react-native-code-push/android/app/src/main/java/com/microsoft/codepush/react/CodePush.java:157: error: cannot find symbol
isLiveReloadEnabled = devInternalSettings.isReloadOnJSChangeEnabled();
^
symbol: method isReloadOnJSChangeEnabled()
location: variable devInternalSettings of type DevInternalSettings
/Users/vorousjames/Desktop/Development/Slide/Slide/node_modules/react-native-code-push/android/app/src/main/java/com/microsoft/codepush/react/CodePushNativeModule.java:175: warning: [unchecked] unchecked cast
List<ReactRootView> mAttachedRootViews = (List<ReactRootView>)mAttachedRootViewsField.get(instanceManager);
^
required: List<ReactRootView>
found: Object
1 error
1 warning
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':react-native-code-push:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
这是什么原因造成的以及如何解决这个问题?
将导入保留在 MainApplication.java
进口com.microsoft.codepush.react.CodePush;
保留 覆盖 getJSBundleFile 方法。
删除 buildConfigFields 并更新为这种格式
resValue "string",
"reactNativeCodePush_androidDeploymentKey
", '"<INSERT_PRODUCTION_KEY>"'
- 如果密钥已添加到
strings.xml
,请将其删除。
关注所有细节的提交here
不确定这里的问题是什么。在 Microsoft appcenter 上 building/distributing 时构建没有问题。我记得在成功构建后唯一与代码推送相关的事情是将不同的部署密钥添加到 build.gradle:
buildTypes {
debug {
signingConfig signingConfigs.debug
// Note: CodePush updates should not be tested in Debug mode as they are overriden by the RN packager. However, because CodePush checks for updates in all modes, we must supply a key.
// specifically left blank in appcenter docs
resValue "string", "CodePushDeploymentKey", '""'
}
releaseStaging {
resValue "string", "CodePushDeploymentKey", '"<key>"'
// Note: It is a good idea to provide matchingFallbacks for the new buildType you create to prevent build issues
// Add the following line if not already there
matchingFallbacks = ['release']
}
release {
// Caution! In production, you need to generate your own keystore file.
// see https://facebook.github.io/react-native/docs/signed-apk-android.
// signingConfig signingConfigs.release
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
resValue "string", "CodePushDeploymentKey", '"<key>"'
}
}
现在,当我尝试在 android studio 中进行构建时,出现此错误:
> Task :react-native-code-push:javaPreCompileDebug UP-TO-DATE
> Task :react-native-code-push:compileDebugJavaWithJavac FAILED
/Users/vorousjames/Desktop/Development/Slide/Slide/node_modules/react-native-code-push/android/app/src/main/java/com/microsoft/codepush/react/CodePush.java:157: error: cannot find symbol
isLiveReloadEnabled = devInternalSettings.isReloadOnJSChangeEnabled();
^
symbol: method isReloadOnJSChangeEnabled()
location: variable devInternalSettings of type DevInternalSettings
/Users/vorousjames/Desktop/Development/Slide/Slide/node_modules/react-native-code-push/android/app/src/main/java/com/microsoft/codepush/react/CodePushNativeModule.java:175: warning: [unchecked] unchecked cast
List<ReactRootView> mAttachedRootViews = (List<ReactRootView>)mAttachedRootViewsField.get(instanceManager);
^
required: List<ReactRootView>
found: Object
1 error
1 warning
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':react-native-code-push:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
这是什么原因造成的以及如何解决这个问题?
将导入保留在 MainApplication.java
进口com.microsoft.codepush.react.CodePush;
保留 覆盖 getJSBundleFile 方法。
删除 buildConfigFields 并更新为这种格式
resValue "string",
"reactNativeCodePush_androidDeploymentKey
", '"<INSERT_PRODUCTION_KEY>"'
- 如果密钥已添加到
strings.xml
,请将其删除。
关注所有细节的提交here