我想将这个java代码更改为c或c ++,并在android JNI上使用它。 我该怎么办?以及如何使用java params map或java object
现在我有了新的问题,我可以创建.h文件,我可以创建.so库,我可以在java本机函数上创建简单的.c代码并调用它成功。例如:print一个字符串“hello world !“;但是如何将这个java代码更改为c或c ++代码的android JNI,任何人都可以给我c或c ++代码,最好控制+ c和控制+ v使用它好!谢谢你非常匹配!!!!
/**
* 获取签名值
*
* @param secretKey
* @param params
* 请求参数
* @return
*/
private static String getSign(String secretKey, Map<String, String[]> params) {
String[] keys = params.keySet().toArray(new String[0]);
Arrays.sort(keys);
StringBuilder query = new StringBuilder();
for (String key : keys) {
if (!"sign".equals(key)) {
String[] value = params.get(key);
query.append(key);
for (String string : value) {
query.append(string);
}
}
}
return MD5(secretKey + query.toString());
}
public static String MD5(String str) {
try {
MessageDigest m = MessageDigest.getInstance("MD5");
m.reset();
m.update(str.getBytes("UTF-8"));
BigInteger bigInt = new BigInteger(1, m.digest());
String hashtext = bigInt.toString(16);
while (hashtext.length() < 32) {
hashtext = "0" + hashtext;
}
return hashtext;
} catch (Exception e) {
throw new RuntimeException("MD5 init failed.", e);
}
}
答案 0 :(得分:1)
简短的回答:你应该手动转换它。
您不太可能找到将Java代码转换为C或C ++并生成有效代码的工具;即性能与您自己编写的代码相当的代码。由于使用JNI的目的是(我假设)优化性能......一个提供低效C / C ++的工具是毫无意义的。
答案 1 :(得分:0)
由于问题是一种模糊,我只能粗略地说:
有些方法可以使用像https://bitbucket.org/arnetheduck/j2c这样的工具将java转换为c ++ 但是,克隆java文件并手动修改它们可能是一个好主意。展位语言并没有那么不同,通过这样做,你将保留控制权。
对于JNI / NDK我不知道你的scillevel,但你可能想看看https://www.sitepoint.com/using-c-and-c-code-in-an-android-app-with-the-ndk/
对于列表,地图等,只需使用STL。它的可靠性和工作自人类开始以来(或左右)