资源简介
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小-像素鸟游戏
相关资源
- java编写的扫描仪程序
- Android(jni) 单独抽取 WebRtc-NS音频降
- 利用jni技术来使Android5.0以下版本适配
- assimp for android
- Android调用JNI的简单附详细步骤
- 在android上的车牌识别
- JAVA通过JNI调用C#dll的整个项目工程
- Android 通过JNI实现双守护进程,保证服
- JNI的全部中英文资料,包括Android ND
- android jni 传递对象的demo
- Android JNI demo
- 安卓MP3录音器源码
- android串口开发demo
- windows平台下的OLLVM4.0,支持so文件中字
- Android加固demo
- 人脸检测,检测人睁闭眼睛,可以判
- release-1911-x64-gdal-3-0-2-mapserver-7-4-2.zi
-
EasyPla
yer-RTSP - DlibLandmarks
- Android实现NFC读卡信息
- Android Studio 3.0 JNI的实现
- Android下切换多路USB摄像头
- AndroidStudio 3.1 使用libpcap
- JNI so文件生成,和jni打开设备节点
- android串口通讯无bug,供小伙伴们研究
- mips64el-linux-android-4.9
- dynamic_register_jni.zip
- android调用vlcjni.so解码播放视频demo
- FFmpegAndroidDemo.zip
- Android串口:史上最为详细通信源码
评论
共有 条评论