该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

不知道哪里出了问题,折腾了好几天了

logcat显示

I load plugin class com.plugin.PluginMain

W dalvik Class resolved by unexpected DEX: Lcom/plugin/PluginMain;(0x42771290):0x50da8000 ref [LLogCatBroadcaster;] LLogCatBroadcaster;(0x42736e80):0x4006e000

.........

源码

import java.lang.reflect.Constructor;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import dalvik.system.DexClassLoader;

import android.app.Activity;

import android.content.pm.PackageInfo;

import android.os.Bundle;

import android.util.Log;

import android.content.*;

public class PluginActivity extends Activity

{

private Context mContext = this;

private Class> localClass;

private Object localInstance;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

String dexpath = "/sdcard/AppProjects/plugin/bin/plugin.apk";

String cachePath = getApplication().getCacheDir().getPath();

String dexoutputpath = cachePath;

String libPath = cachePath;

LoadAPK(dexpath, dexoutputpath, libPath);

pluginActivityCreate();

}

public void LoadAPK(String dexpath, String dexoutputpath, String libPath)

{

try

{

ClassLoader classLoader = getClassLoader();

DexClassLoader localDexClassLoader = new DexClassLoader(dexpath, dexoutputpath, libPath, classLoader);

String activityname = getActivityName(dexpath);

if (activityname != null)

{

localClass = localDexClassLoader.loadClass(activityname);

Constructor> localConstructor = localClass.getConstructor(new Class[] {Context.class});

localInstance = localConstructor.newInstance(new Object[] {mContext});

Log.i("load plugin",localClass.toString());

}

return;

}

catch (Exception e)

{

e.printStackTrace();

}

}

public String getActivityName(String apkFile)

{

PackageInfo plocalObject = mContext.getPackageManager().getPackageArchiveInfo(apkFile, 1);

if ((plocalObject.activities != null) && (plocalObject.activities.length > 0))

{

return plocalObject.activities[0].name;

}

else

{

return null;

}

}

private void pluginActivityCreate(){

try

{

Method onCreate = localClass.getDeclaredMethod("onCreate", new Class[]{Bundle.class});

onCreate.setAccessible(true);

onCreate.invoke(localInstance, new Object[]{null});

}

catch (NoSuchMethodException e)

{

e.printStackTrace();

}

catch (IllegalArgumentException e)

{

e.printStackTrace();

}

catch (InvocationTargetException e)

{

e.printStackTrace();

}

catch (IllegalAccessException e)

{

e.printStackTrace();

}

}

}

插件

import android.app.*;

import android.os.*;

import android.util.*;

import android.view.*;

import android.view.ViewGroup.*;

import android.content.*;

import android.widget.*;

import android.graphics.*;

public class PluginMain extends Activity

{

protected Activity mProxyActivity = this;

private String TAG = "plugin";

public PluginMain()

{

super();

}

public PluginMain(Context context)

{

super();

this.mProxyActivity = (Activity) context;

}

@Override

public void onCreate(Bundle savedInstanceState)

{

if (mProxyActivity == this)

{

super.onCreate(savedInstanceState);

}

else

{

mProxyActivity.setContentView(getView(mProxyActivity));

}

Log.d(TAG, "Plugin onCreate");

}

private View getView(Context context)

{

LinearLayout layout = new LinearLayout(context);

layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

layout.setBackgroundColor(Color.WHITE);

Button button = new Button(context);

button.setText("button");

layout.addView(button, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

button.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View p1)

{

// TODO: Implement this method

Toast.makeText(mProxyActivity, "HelloWorld", Toast.LENGTH_SHORT).show();

}

});

return layout;

}

}

android 动态调用apk,通过反射动态加载未安装apk相关推荐

  1. Android插件化开发之用DexClassLoader加载未安装的APK资源文件来实现app切换背景皮肤

    第一步.先制做一个有我们需要的图片资源的APK 如下图,这里有个about_log.png,我们需要生成apk文件. 生成的apk文件如果你不到项目的文件夹里面去取apk,想通过命令放到手机里面去可以 ...

  2. Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类...

    前言 近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来较复杂,暂时搁置了该功能,但也积累了一些经验,将分两篇文章来写这部分的内容,欢迎交流! 关键字:Android动态加载 声明 欢迎转载, ...

  3. [转]Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类...

    本文转自:http://www.cnblogs.com/over140/archive/2012/03/29/2423116.html 前言 近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来 ...

  4. Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源...

    前言  Android动态加载(下)--加载已安装APK中的类和资源. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://ov ...

  5. 【Android 安全】DEX 加密 ( 多 DEX 加载 | 65535 方法数限制和 MultiDex 配置 | PathClassLoader 类加载源码分析 | DexPathList )

    文章目录 一.65535 方法数限制和 MultiDex 配置 二.多 DEX 加载引入 三.PathClassLoader 类加载源码分析 四.BaseDexClassLoader 类加载源码分析 ...

  6. Android开发之动态加载,运行未安装apk

    Android运行未安装apk可以使用Android的DexClassLoader类 这个也可以再Android的官方文档中看到 A class loader that loads classes f ...

  7. jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

    博客分类: jquery-easyui jQueryAjax框架HTML  现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...

  8. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexFile loadDexFile 函数 | 构造函数 | openDexFile 函数 )

    文章目录 前言 一.DexFile.loadDexFile 函数分析 二.DexFile 构造函数分析 三.DexFile.openDexFile 函数分析 前言 上一篇博客 [Android 逆向] ...

  9. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexPathList 中根据 File 加载 DexFile | loadDexFile 分析 )

    文章目录 前言 一.根据 File 加载 DexFile 二.DexPathList.loadDexFile 函数分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DexClassLo ...

最新文章

  1. DataGrid鼠标事件处理
  2. HarmonyOS之常用组件Text的功能和使用
  3. kerberos体系下的应用(yarn,spark on yarn)
  4. Servlet使用适配器模式进行增删改查案例(DeptDaoImpl.java)
  5. python函数结构_PYTHON 之结构体,全局变量,函数参数,lambda编程 等
  6. html5着陆页模板,多用途着陆页HTML模板
  7. 办公自动化-实测doc文档-创建文档添加内容-0223
  8. 静态代码检查工具简介
  9. flume监听服务器文件,flume监听服务器端口数据库
  10. LINUX警告:检测到时钟错误。您的创建可能是不完整的。-转
  11. 在字符串中标红_在C ++中标记字符串
  12. SQL查询效率-100w数据查询只要1秒
  13. linux命令行中的大括号,linux命令行学习(19):花括号扩展(brace expansion)
  14. TMC2300-LA 低压、超静音微型步进电机驱动器
  15. html如何调用less,LESS
  16. 解决 DOES NOT SUPPORT INDEXING ERROR IN A GO PROGRAM
  17. kaggle实战:Titanic
  18. eSPI自学笔记(二):Perpheral Channel与Subtractive Decode
  19. 外接硬盘在电脑中不显示的解决方案
  20. numpy矩阵与向量类型的向量乘法

热门文章

  1. ES6新功能-模板字符串
  2. iview日期控件 双向绑定日期
  3. 鸿蒙系统平板界面,华为鸿蒙系统界面首次曝光!首款预装鸿蒙设备正式入网:发布在即...
  4. sql 数组_sql注入中级
  5. 下载并使用阿里图标库
  6. react使用setState注意事项
  7. Linux+GitLab+Jenkins实现项目的持续集成
  8. 谈谈JavaScript中编程实现以及使用内置方法实现进制转换
  9. ionic4安卓真机调试
  10. elasticsearch和mysql排序问题