Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用DexClassLoader加载加密的类_Android_Classloader - Fatal编程技术网

Android 使用DexClassLoader加载加密的类

Android 使用DexClassLoader加载加密的类,android,classloader,Android,Classloader,我想知道是否可以将一个加密的类或jar文件附加到我的apk,并在应用程序中解密该类或jar文件,然后使用DexClassLoader加载该类?有可能,请参考更多基本信息,我所做的是更改prepareDex函数以解密该文件并将其保存在本地。下面是通过反射加载类的部分代码: final File optimizedDexOutputPath = getDir("outdex", Context.MODE_PRIVATE); final File dexInternalStoragePath = ne

我想知道是否可以将一个加密的类或jar文件附加到我的apk,并在应用程序中解密该类或jar文件,然后使用DexClassLoader加载该类?

有可能,请参考更多基本信息,我所做的是更改prepareDex函数以解密该文件并将其保存在本地。下面是通过反射加载类的部分代码:

final File optimizedDexOutputPath = getDir("outdex", Context.MODE_PRIVATE);
final File dexInternalStoragePath = new File(getDir("dex", Context.MODE_PRIVATE),
                SECONDARY_DEX_NAME);
        // Initialize the class loader with the secondary dex file.
DexClassLoader cl = new DexClassLoader(dexInternalStoragePath.getAbsolutePath(),
        optimizedDexOutputPath.getAbsolutePath(), null, getClassLoader());

try {
     @SuppressWarnings("unchecked")
     final Class<Object> obj = (Class<Object>) cl.loadClass("com.packagename.Classname");

     final Constructor<Object> constr =  obj.getConstructor(Activity.class, String.class, Handler.class);
     myInstance  = constr.newInstance(this, mString, mHandler);

     Method doSomething;
     try {
              doSomething = v.getMethod("YOURMETHOD");
              doSomething.invoke(myInstance);
         }

    }
final File optimizedDexOutputPath=getDir(“outdex”,Context.MODE\u PRIVATE);
最终文件dexInternalStoragePath=新文件(getDir(“dex”,Context.MODE_PRIVATE),
二级索引(名称);
//使用辅助dex文件初始化类加载器。
DexClassLoader cl=新的DexClassLoader(dexInternalStoragePath.getAbsolutePath(),
optimizedDexOutputPath.getAbsolutePath(),null,getClassLoader());
试一试{
@抑制警告(“未选中”)
最终类obj=(类)cl.loadClass(“com.packagename.Classname”);
最终构造函数constr=obj.getConstructor(Activity.class、String.class、Handler.class);
myInstance=constr.newInstance(this,mString,mHandler);
方法剂量测定法;
试一试{
doSomething=v.getMethod(“你的方法”);
调用(myInstance);
}
}
我还发布了所有捕获,但这些捕获应该很容易生成/处理。

有可能,请参考更多基本信息,我所做的是更改prepareDex函数以解密文件并将其保存在本地。下面是通过反射加载类的部分代码:

final File optimizedDexOutputPath = getDir("outdex", Context.MODE_PRIVATE);
final File dexInternalStoragePath = new File(getDir("dex", Context.MODE_PRIVATE),
                SECONDARY_DEX_NAME);
        // Initialize the class loader with the secondary dex file.
DexClassLoader cl = new DexClassLoader(dexInternalStoragePath.getAbsolutePath(),
        optimizedDexOutputPath.getAbsolutePath(), null, getClassLoader());

try {
     @SuppressWarnings("unchecked")
     final Class<Object> obj = (Class<Object>) cl.loadClass("com.packagename.Classname");

     final Constructor<Object> constr =  obj.getConstructor(Activity.class, String.class, Handler.class);
     myInstance  = constr.newInstance(this, mString, mHandler);

     Method doSomething;
     try {
              doSomething = v.getMethod("YOURMETHOD");
              doSomething.invoke(myInstance);
         }

    }
final File optimizedDexOutputPath=getDir(“outdex”,Context.MODE\u PRIVATE);
最终文件dexInternalStoragePath=新文件(getDir(“dex”,Context.MODE_PRIVATE),
二级索引(名称);
//使用辅助dex文件初始化类加载器。
DexClassLoader cl=新的DexClassLoader(dexInternalStoragePath.getAbsolutePath(),
optimizedDexOutputPath.getAbsolutePath(),null,getClassLoader());
试一试{
@抑制警告(“未选中”)
最终类obj=(类)cl.loadClass(“com.packagename.Classname”);
最终构造函数constr=obj.getConstructor(Activity.class、String.class、Handler.class);
myInstance=constr.newInstance(this,mString,mHandler);
方法剂量测定法;
试一试{
doSomething=v.getMethod(“你的方法”);
调用(myInstance);
}
}
我还推荐了所有捕获,但这些捕获应该很容易生成/处理