Kis*_*nga 2 java-native-interface android android-ndk
对于共享库的保护问题,我将尝试使用JNI获取包名,但它会产生错误.那么,是否可以使用JNI获取包名称或applicationId?如果有人有这个问题的例子或参考,那么建议.因为没有任何好的教程或解决方案可用.否则,任何其他方式都建议保护共享库.
ali*_*dro 14
是的,这是可能的.Android基于Linux,我们可以在内核提供的用户空间中获取大量信息.
在您的示例中,此处存储的信息 /proc/${process_id}/cmdline
我们可以读取此文件,并获取应用程序ID.
看一个简单的例子
#include <jni.h>
#include <unistd.h>
#include <android/log.h>
#include <stdio.h>
#define TAG "YOURAPPTAG"
extern "C"
JNIEXPORT void JNICALL
Java_com_x_y_MyNative_showApplicationId(JNIEnv *env, jclass type) {
pid_t pid = getpid();
__android_log_print(ANDROID_LOG_DEBUG, TAG, "process id %d\n", pid);
char path[64] = { 0 };
sprintf(path, "/proc/%d/cmdline", pid);
FILE *cmdline = fopen(path, "r");
if (cmdline) {
char application_id[64] = { 0 };
fread(application_id, sizeof(application_id), 1, cmdline);
__android_log_print(ANDROID_LOG_DEBUG, TAG, "application id %s\n", application_id);
fclose(cmdline);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2645 次 |
| 最近记录: |