如何将java代码更改为c或c ++代码,以便与Android JNI一起使用

时间:2016-05-31 10:06:29

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

我想将这个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);
    }
}

2 个答案:

答案 0 :(得分:1)

简短的回答:你应该手动转换它。

  • 阅读并理解Java代码
  • 编写C或C ++代码。

您不太可能找到将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。它的可靠性和工作自人类开始以来(或左右)