签名什么时候可以使用tm

1073人阅读
自检程序写在so里
在文件头中导入
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include &jni.h&
#include&android/log.h&
#include &string.h&
#include &unistd.h&
然后在cpp中写入Java调用c的接口
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
extern &C&
JNIEXPORT jint JNICALL Java_org_cocos2dx_cpp_AppActivity_checkAPK(JNIEnv *env, jclass jcl,
jobject context_object) {
jclass context_class = env-&GetObjectClass(context_object);
//context.getPackageManager()
jmethodID methodId = env-&GetMethodID(context_class, &getPackageManager&, &()Landroid/content/pm/PackageM&);
jobject package_manager_object = env-&CallObjectMethod(context_object, methodId);
if (package_manager_object == NULL) {
__android_log_print(ANDROID_LOG_INFO, &JNITag&,&getPackageManager() Failed!&);
return NULL;
//context.getPackageName()
methodId = env-&GetMethodID(context_class, &getPackageName&, &()Ljava/lang/S&);
jstring package_name_string = (jstring)env-&CallObjectMethod(context_object, methodId);
if (package_name_string == NULL) {
__android_log_print(ANDROID_LOG_INFO, &JNITag&,&getPackageName() Failed!&);
return NULL;
env-&DeleteLocalRef(context_class);
//PackageManager.getPackageInfo(Sting, int)
jclass pack_manager_class = env-&GetObjectClass(package_manager_object);
methodId = env-&GetMethodID(pack_manager_class, &getPackageInfo&, &(Ljava/lang/SI)Landroid/content/pm/PackageI&);
env-&DeleteLocalRef(pack_manager_class);
jobject package_info_object = env-&CallObjectMethod(package_manager_object, methodId, package_name_string, 64);
if (package_info_object == NULL) {
__android_log_print(ANDROID_LOG_INFO, &JNITag&,&getPackageInfo() Failed!&);
return NULL;
env-&DeleteLocalRef(package_manager_object);
//PackageInfo.signatures[0]
jclass package_info_class = env-&GetObjectClass(package_info_object);
jfieldID fieldId = env-&GetFieldID(package_info_class, &signatures&, &[Landroid/content/pm/S&);
env-&DeleteLocalRef(package_info_class);
jobjectArray signature_object_array = (jobjectArray)env-&GetObjectField(package_info_object, fieldId);
if (signature_object_array == NULL) {
__android_log_print(ANDROID_LOG_INFO, &JNITag&,&PackageInfo.signatures[] is null&);
return NULL;
jobject signature_object = env-&GetObjectArrayElement(signature_object_array, 0);
env-&DeleteLocalRef(package_info_object);
//Signature.toCharsString()
jclass signature_class = env-&GetObjectClass(signature_object);
methodId = env-&GetMethodID(signature_class, &hashCode&, &()I&);
env-&DeleteLocalRef(signature_class);
int signature_string = env-&CallIntMethod(signature_object, methodId);
HelloWorld::hashCode = signature_
return signature_
HelloWorld中的hashCode就是我们自检的结果,程序运行时检测hashCode是否与签名时的一致即可
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:93633次
积分:1509
积分:1509
排名:千里之外
原创:51篇
评论:131条
(1)(2)(1)(1)(2)(1)(1)(3)(10)(3)(4)(5)(18)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'

参考资料

 

随机推荐