CallObjectMethod JNI使用设备背光而不是运行函数

时间:2018-01-03 10:51:30

标签: android android-ndk java-native-interface ndk-build

我正在创建一个使用JNI加密和解密数据的本机代码。我使用Java代码实际加密和解密,所以我从cpp文件调用这些函数。 主要活动称此加密函数将数据作为字节数组传递,并返回加密字节数组。

当我在设备上运行Android应用程序时,它只是稍微使用背光并退出。我尝试评论代码行, CallObjectMethod()导致了这种行为。

这是我正在使用的cpp代码。

JNIEXPORT jbyteArray JNICALL
Java_com_airtel_agilelabs_utils_NativeEncryptionUtils_encrypt(
    JNIEnv* env,
    jobject obj, jobject context, jbyteArray data) {
jbyteArray a = data;
jstring key = env->NewStringUTF("[key]");
jclass des = env->FindClass("com/test/test1/utils/NativeDES");
jmethodID encrypt_func = env->GetMethodID(des,"encryptdata","([BLjava/lang/String;)[B");
jobject result = env->CallObjectMethod(obj,encrypt_func,a,key);
jbyteArray byte_result = (jbyteArray) result;
return byte_result;

要为此调用的java类是

  public byte[] encryptdata(byte[] data1, String key)
  {
    byte[] clear = null;
    try {
        SecretKeySpec sc = new SecretKeySpec(key.getBytes("UTF-8"),"DESede");
        Cipher cipher = Cipher.getInstance("DESede");
        cipher.init(Cipher.ENCRYPT_MODE,sc);
        clear = cipher.doFinal(data1);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (NoSuchPaddingException e) {
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    } catch (BadPaddingException e) {
        e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
        e.printStackTrace();
    }
    return clear;
     }

此外,我不确定是否必须使用CallObjectMethod或任何其他功能。 java函数返回一个字节数组,所以我对该对象进行了类型转换。但由于错误是在上一步产生的,所以不确定这是否正常。

0 个答案:

没有答案