質問するログイン新規登録

質問編集履歴

2

2017/11/18 12:56

投稿

Seiten_Minagawa
Seiten_Minagawa

スコア58

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,7 @@
5
5
  ###発生している問題・エラーメッセージ
6
6
 
7
7
  ```
8
- Java側で存在するはずのアルゴリズム名を指定しているのにNoSuchAlgorithmExceptionが出てしまう。
8
+ (済)Java側で存在するはずのアルゴリズム名を指定しているのにNoSuchAlgorithmExceptionが出てしまう。
9
9
  C++側でJava側に正常に引数が渡せていない模様。
10
10
 
11
11
  ```
@@ -27,8 +27,16 @@
27
27
  {
28
28
  byte[] str_bytes = str.getBytes();
29
29
 
30
+ try
31
+ {
30
- MessageDigest md = MessageDigest.getInstance("MD5");
32
+ MessageDigest md = MessageDigest.getInstance("MD5");
31
- hash = md.digest(str_bytes);
33
+ hash = md.digest(str_bytes);
34
+ }
35
+ catch (NoSuchAlgorithmExpection e)
36
+ {
37
+ hash = new byte[1];
38
+ hash[0] = 0;
39
+ }
32
40
  }
33
41
  }
34
42
 

1

一部誤字修正。GetByteArrayElementsのisCopy引数に渡すためのjbooleanを追加。

2017/11/18 12:56

投稿

Seiten_Minagawa
Seiten_Minagawa

スコア58

title CHANGED
File without changes
body CHANGED
@@ -1,11 +1,13 @@
1
1
  ###前提・実現したいこと
2
- AndroidにおいてNativeActivityを使ったアプリ。
2
+ AndroidにおいてAndroid版DXライブラリとNativeActivityを使ったアプリ。
3
3
  JNIを使って、MD5ハッシュを取得したい。
4
4
 
5
5
  ###発生している問題・エラーメッセージ
6
6
 
7
7
  ```
8
8
  Java側で存在するはずのアルゴリズム名を指定しているのにNoSuchAlgorithmExceptionが出てしまう。
9
+ C++側でJava側に正常に引数が渡せていない模様。
10
+
9
11
  ```
10
12
 
11
13
  ###コード
@@ -37,6 +39,7 @@
37
39
  ```
38
40
  bool MD5AR::CalculationMD5(const std::string& str)
39
41
  {
42
+         //DXライブラリのANativeActivityを取得する関数
40
43
  auto nativeactivity = GetNativeActivity();
41
44
  JNIEnv* env;
42
45
 
@@ -45,17 +48,18 @@
45
48
  //クラスオブジェクトを持ってくる
46
49
  jclass jclass_(プロジェクト名) = env->GetObjectClass(nativeactivity->clazz);
47
50
 
48
- jmethodID jmethidID_CalculationMD5 = env->GetMethodID(jclass_(プロジェクト名), "CauculationMD5", "(Ljava/lang/string;)V");
51
+ jmethodID jmethodID_CalculationMD5 = env->GetMethodID(jclass_(プロジェクト名), "CauculationMD5", "(Ljava/lang/String;)V");
49
52
 
50
53
  jstring jstr = env->NewStringUTF(str.c_str());
51
54
 
52
55
  //MD5を計算
53
- env->CallVoidMethod(nativeactivity->clazz, jmethidID_CalculationMD5, jstr);
56
+ env->CallVoidMethod(nativeactivity->clazz, jmethodID_CalculationMD5, jstr);
54
57
 
55
58
  //計算されたMD5を持ってくる
56
59
  jfieldID jfieldID_hash = env->GetFieldID(jclass_(プロジェクト名), "hash", "[B");
57
- jbyteArray hasharr = (jbyteArray)env->GetObjectField(jclass_(プロジェクト名), jfieldID_hash);
60
+ jbyteArray hasharr = (jbyteArray)env->GetObjectField(nativeactivity->clazz, jfieldID_hash);
61
+ jboolean boolean;
58
- auto hasharrptr = env->GetByteArrayElements(hasharr, nullptr);
62
+ auto hasharrptr = env->GetByteArrayElements(hasharr, &boolean);
59
63
 
60
64
  for (jsize i = 0, is = env->GetArrayLength(hasharr); i < is; i++)
61
65
  {