From 95d5de5c56d959255633e40c5f788685f2ad10f2 Mon Sep 17 00:00:00 2001 From: James Swan <122404367+swan-amazon@users.noreply.github.com> Date: Fri, 31 Jan 2025 20:15:21 -0800 Subject: [PATCH] Fix compilation errors for android-chip-tool and java-matter-commissioner (#37346) * Fix compilation errors for android-chip-tool and java-matter-commissioner - Corrected logging statement syntax in `AndroidLogDownloadFromNode.cpp` - Fixed type casting issue for `jlong jremoteNodeId` - Resolved incorrect pointer dereference causing a misplaced operation in `OnTransferCallback` - Updated type casting for `msg_length` in `CHIPP256KeypairBridge.cpp` to use `jsize` instead of `uint32_t` - Adjusted JNI function call to use `static_cast(msg_length)` These changes ensure compatibility with JNI and address type inconsistencies that were causing build failures. Testing: ```bash export PATH=$PATH:/opt/kotlin-compiler-1.8.0/bin export ANDROID_HOME=/opt/Android/sdk/ export ANDROID_NDK_HOME=/opt/Android/sdk/ndk/23.2.8568313 export JAVA_HOME=/Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home export JAVA_PATH=/Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home sed 's/ -XX:MaxPermSize=2048m//' examples/android/CHIPTool/gradle.properties > examples/android/CHIPTool/gradle.properties.new && mv examples/android/CHIPTool/gradle.properties.new examples/android/CHIPTool/gradle.properties source scripts/activate.sh ./scripts/build/build_examples.py --target android-arm64-chip-tool --target darwin-arm64-java-matter-controller build ``` * fix: Cast GetFabricIndex() return value to jint in AndroidLogDownloadFromNode The change adds an explicit static cast to convert the FabricIndex return value to jint type when assigning to jFabricIndex variable, maintaining type safety in the JNI interface layer. --- src/controller/java/AndroidLogDownloadFromNode.cpp | 9 +++++---- src/controller/java/CHIPP256KeypairBridge.cpp | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/controller/java/AndroidLogDownloadFromNode.cpp b/src/controller/java/AndroidLogDownloadFromNode.cpp index 785567476fc125..f439cd64d881fe 100644 --- a/src/controller/java/AndroidLogDownloadFromNode.cpp +++ b/src/controller/java/AndroidLogDownloadFromNode.cpp @@ -152,7 +152,7 @@ void AndroidLogDownloadFromNode::OnResponseRetrieveLogs(void * context, using namespace chip::app::Clusters::DiagnosticLogs; if (data.status == StatusEnum::kSuccess) { - ChipLogProgress(Controller, "Success. Will receive log from BDX protocol.") + ChipLogProgress(Controller, "Success. Will receive log from BDX protocol."); } else if (data.status == StatusEnum::kExhausted) { @@ -210,8 +210,8 @@ void AndroidLogDownloadFromNode::FinishLogDownloadFromNode(void * context, CHIP_ JniLocalReferenceScope scope(env); jobject jCallback = self->mJavaCallback.ObjectRef(); - jint jFabricIndex = self->mController->GetFabricIndex(); - jlong jremoteNodeId = self->mRemoteNodeId; + jint jFabricIndex = static_cast(self->mController->GetFabricIndex()); + jlong jremoteNodeId = static_cast(self->mRemoteNodeId); VerifyOrExit(env != nullptr, ChipLogError(Controller, "Could not get JNIEnv for current thread")); @@ -274,7 +274,8 @@ void AndroidLogDownloadFromNode::OnTransferCallback(FabricIndex fabricIndex, Nod if (ret != JNI_TRUE) { - ChipLogError(Controller, "Transfer will be rejected.") * errInfoOnFailure = CHIP_ERROR_INTERNAL; + ChipLogError(Controller, "Transfer will be rejected."); + *errInfoOnFailure = CHIP_ERROR_INTERNAL; } } diff --git a/src/controller/java/CHIPP256KeypairBridge.cpp b/src/controller/java/CHIPP256KeypairBridge.cpp index a73eb417203c10..a42c5bc50e87a0 100644 --- a/src/controller/java/CHIPP256KeypairBridge.cpp +++ b/src/controller/java/CHIPP256KeypairBridge.cpp @@ -108,14 +108,14 @@ CHIP_ERROR CHIPP256KeypairBridge::ECDSA_sign_msg(const uint8_t * msg, size_t msg return CHIP_ERROR_INCORRECT_STATE; } - VerifyOrReturnError(CanCastTo(msg_length), CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(CanCastTo(msg_length), CHIP_ERROR_INVALID_ARGUMENT); CHIP_ERROR err = CHIP_NO_ERROR; jbyteArray jniMsg; jobject signedResult = nullptr; JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread(); VerifyOrReturnError(env != nullptr, err = CHIP_JNI_ERROR_NO_ENV); - err = JniReferences::GetInstance().N2J_ByteArray(env, msg, static_cast(msg_length), jniMsg); + err = JniReferences::GetInstance().N2J_ByteArray(env, msg, static_cast(msg_length), jniMsg); VerifyOrReturnError(err == CHIP_NO_ERROR, err); VerifyOrReturnError(jniMsg != nullptr, err); VerifyOrReturnError(mDelegate.HasValidObjectRef(), CHIP_ERROR_INCORRECT_STATE);