资源简介
http://blog.csdn.net/csdn49532/article/details/50624627
配套代码,使用JAVA和JNI二种方法动态加载dex,调用dex中的方法,对android APK进行加固,防止APK被破解。
代码片段和文件信息
#include
#include
#include
#include “JNIUtil.h“
#include
#include
#include
#include
extern “C“
{
string copyDexToData(JNIEnv* env jobject asset string dexName
string dataPath);
void Java_com_example_dexload_NativeLoad_loadDex(JNIEnv* env jobject obj
jstring dexName jstring dataPath jobject asset)
{
JavaVM* jvm;
env->GetJavaVM(&jvm);
JNIUtil::SetJavaVm(jvm);
JNIUtil util;
string strDexName = util.Jstring2String(dexName);
string strdataPath = util.Jstring2String(dataPath);
string strDexPath = copyDexToData(env asset strDexName strdataPath);
string strDestDexPath = strdataPath + “/cache“;
LOGI(“%s“strDexPath.c_str());
LOGI(“%s“strDestDexPath.c_str());
jstring jDexPath = util.String2Jstring(strDexPath.c_str());
jstring jDestDexPath = util.String2Jstring(strDestDexPath.c_str());
//查找ClassLoader类并调用静态方法获取系统的classloader对象
jclass classloaderClass = env->FindClass(“java/lang/ClassLoader“);
jmethodID getsysloaderMethod = env->GetStaticMethodID(classloaderClass
“getSystemClassLoader“ “()Ljava/lang/ClassLoader;“);
jobject loader = env->CallStaticobjectMethod(classloaderClass
getsysloaderMethod);
//查找DexClassLoader类并且创建对象生成优化后的dex
jclass dexLoaderClass = env->FindClass(“dalvik/system/DexClassLoader“);
jmethodID initDexLoaderMethod = env->GetMethodID(dexLoaderClass ““
“(Ljava/lang/String;Ljava/lang/String;“
“Ljava/lang/String;Ljava/lang/ClassLoader;)V“);
jobject dexLoader = env->Newobject(dexLoaderClass initDexLoaderMethod
jDexPath jDestDexPath NULL loader);
//赋值给java端的DexClassLoader对象
jclass native = env->GetobjectClass(obj);
jfieldID loadID = env->GetFieldID(native “mDex“
“Ldalvik/system/DexClassLoader;“);
env->SetobjectField(obj loadID dexLoader);
}
void Java_com_example_dexload_NativeLoad_test(JNIEnv* env jobject obj
jobject ac)
{
//获取java端的ClassLoader对象
jclass native = env->GetobjectClass(obj);
jfieldID loadID = env->GetFieldID(native “mDex“
“Ldalvik/system/DexClassLoader;“);
jobject load = env->GetobjectField(obj loadID);
//调用ClassLoader的方法loadClass加载dex中的Test1类
jclass classloaderClass = env->GetobjectClass(load);
jmethodID loadClassMethod = env->GetMethodID(classloaderClass “loadClass“
“(Ljava/lang/String;)Ljava/lang/Class;“);
JNIUtil util;
jstring Test1ClassName = util.String2Jstring(“com.example.dextest.Test1“);
jclass javaClientClass = (jclass) env->CallobjectMethod(load
loadClassMethod Test1ClassName);
//创建Test1类的对象并且调用其中的test方法
jmethodID initFuncTest = env->GetMethodID(javaClientClass ““ “()V“); //构造函数ID
jobject objTest1 = env->Newobject(javaClientClass initFuncTest);
jmethodID Test_method = env->GetMethodID(javaClientClass “test“
“(Landroid/app/Activity;)V“);
if (Test_method != NULL)
env->CallVoidMethod(objTest1 Test_method ac);
}
st
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 475 2015-12-23 10:31 DexLoad\.classpath
文件 3699 2015-12-31 15:09 DexLoad\.cproject
文件 1467 2015-12-31 15:09 DexLoad\.project
文件 1104 2016-02-01 16:22 DexLoad\AndroidManifest.xm
目录 0 2016-01-29 11:27 DexLoad\assets\
文件 1856 2016-01-29 11:27 DexLoad\assets\test.dex
文件 51394 2015-12-23 10:31 DexLoad\ic_launcher-web.png
目录 0 2016-02-02 16:55 DexLoad\jni\
文件 199 2016-02-02 17:03 DexLoad\jni\Android.mk
文件 75 2016-02-02 16:57 DexLoad\jni\Application.mk
文件 3915 2016-02-02 17:38 DexLoad\jni\DexLoad.cpp
文件 1875 2016-02-02 17:06 DexLoad\jni\JNIUtil.cpp
文件 610 2016-02-02 17:04 DexLoad\jni\JNIUtil.h
文件 781 2015-12-23 10:31 DexLoad\proguard-project.txt
文件 563 2015-12-23 10:31 DexLoad\project.properties
目录 0 2015-12-23 10:31 DexLoad\res\
目录 0 2015-12-23 10:31 DexLoad\res\drawable-hdpi\
文件 7658 2015-12-23 10:31 DexLoad\res\drawable-hdpi\ic_launcher.png
目录 0 2015-12-23 10:31 DexLoad\res\drawable-ldpi\
目录 0 2015-12-23 10:31 DexLoad\res\drawable-mdpi\
文件 3777 2015-12-23 10:31 DexLoad\res\drawable-mdpi\ic_launcher.png
目录 0 2015-12-23 10:31 DexLoad\res\drawable-xhdpi\
文件 12516 2015-12-23 10:31 DexLoad\res\drawable-xhdpi\ic_launcher.png
目录 0 2015-12-23 10:31 DexLoad\res\drawable-xxhdpi\
文件 24777 2015-12-23 10:31 DexLoad\res\drawable-xxhdpi\ic_launcher.png
目录 0 2015-12-23 10:32 DexLoad\res\layout\
文件 335 2015-12-23 10:31 DexLoad\res\layout\activity_main.xm
目录 0 2015-12-23 10:31 DexLoad\res\menu\
文件 369 2015-12-23 10:31 DexLoad\res\menu\main.xm
目录 0 2015-12-23 10:31 DexLoad\res\values\
文件 220 2015-12-23 10:31 DexLoad\res\values\dimens.xm
............此处省略47个文件信息
- 上一篇:JD-GUI 0.2.5
- 下一篇:java小-像素鸟游戏
相关资源
- JNI Java本地接口规范官方中文版
- NetBetBeans 编写Java调用DLL代码
- Android Studio使用JNI调用C代码 demo \“
- Android jni从入门到精通必备jni API文档
- 最简单的JavaCPP调用DLL
- jni 开发 帮助文档 api 适合安卓/Andro
- 使用JNA替代JNI调用DLL,并解决内存溢
- Android下3DES加密算法的JNI实现(完善版
- 安卓串口Socket通讯USB驱动jni相关-And
- Android studio CMake方式引入jni .a文件
- jni.pas
- Java读取注册表总结之 com.ice.jni.regis
- java修改注册表 com.ice.jni.registry
- Java JNI简单实现
- jni的简单调用
- JAVA JNI 样例,总结了JNI的书写方法。
- android SimpleJni进阶1源码
- Android JNI调用-文件操作
- jnitrace一个Frida模块,跟踪Android应用程
- JNI调用例程操作LED
- Android-ndk-jni AES加解密 C++
- andorid使用jni执行shell命令
- PB调用java组件SatJni 1.2
- apk加固 项目源码
- java使用JNI技术实现JAVA程序调用dll
评论
共有 条评论