要在Android NDK中获取二进制文件的MD5,可以使用以下步骤和代码示例:
LOCAL_LDLIBS := -lmd
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
#include
#include
#include
#include
#include
#include
#include
jstring Java_com_example_myapplication_MainActivity_calculateFileMD5(JNIEnv *env, jobject instance, jstring filePath) {
const char *path = env->GetStringUTFChars(filePath, JNI_FALSE);
int file = open(path, O_RDONLY);
if (file < 0) {
return env->NewStringUTF("");
}
MD5_CTX md5Context;
MD5_Init(&md5Context);
const int bufferSize = 4096;
unsigned char buffer[bufferSize];
ssize_t bytesRead;
while ((bytesRead = read(file, buffer, bufferSize)) > 0) {
MD5_Update(&md5Context, buffer, bytesRead);
}
unsigned char digest[MD5_DIGEST_LENGTH];
MD5_Final(digest, &md5Context);
close(file);
char md5String[MD5_DIGEST_LENGTH * 2 + 1];
for (int i = 0; i < MD5_DIGEST_LENGTH; i++) {
sprintf(&md5String[i * 2], "%02x", (unsigned int)digest[i]);
}
return env->NewStringUTF(md5String);
}
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("native-lib");
}
public native String calculateFileMD5(String filePath);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String filePath = "/path/to/your/file";
String md5 = calculateFileMD5(filePath);
Log.d("MD5", "MD5: " + md5);
}
}
请确保将/path/to/your/file
替换为你的实际文件路径。
这样,你就可以在Android NDK中获取二进制文件的MD5哈希值了。