Android 的自定义类加载器?

2024-04-11

我正在编写一个仪器库,我想在桌面和移动设备(Android)上使用它。

它的功能是:

  1. 公开一个带有单个参数的 main,即目标类的 main
  2. 安装一个类加载器,在加载所有类时拦截它们并对其进行检测

Like so:

    // Expects args[0] to contain the name of the INNER main
    public static void main(String[] args) throws Throwable {
            String className = args[0];
            String [] newArgs = new String[0];

            if(args.length > 1) {
                    newArgs = Arrays.copyOfRange(args, 1, args.length-1);
            }

            System.out.println("Bootstrapping " + className);

            Loader s = new Loader(ClassLoader.getSystemClassLoader().getParent());
            Class<?> c = s.loadClass(className);
            c.getDeclaredMethod("main", new Class[] { String[].class }).invoke(
                            null, new Object[] { newArgs });
    }

问题是这样的:

我怎样才能为 Android 应用程序做大致相同的事情?

一种想法是修改 Android 清单,将现有活动替换为“包装器”活动,然后安装类加载器并调用原始的底层活动。有没有更好的办法?


有一个项目叫droidbox http://code.google.com/p/droidbox/检测 Android 恶意软件。有一段代码可以为您提供很大帮助。

package com.loader;

import dalvik.system.DexClassLoader;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class LoaderActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        DexClassLoader dLoader = new DexClassLoader("/sdcard/DroidBoxTests.apk","/sdcard/", null, ClassLoader.getSystemClassLoader().getParent());

        Class calledClass = null;
        try {
            calledClass = dLoader.loadClass("droidbox.tests.DroidBoxTests");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Intent it=new Intent(this, calledClass);
        it.setClassName("droidbox.tests", "droidbox.tests.DroidBoxTests");
        startActivity(it);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 的自定义类加载器? 的相关文章

随机推荐

  • if (x==0||7||14||21||-7||-14) {y=星期四;} [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 你能像这样
  • 使用 Google Analytics 跟踪 XML Web 服务上的点击次数

    我有一个 xml Web 服务 我想使用 Google Analytics 进行跟踪 由于它使用小型客户端 JavaScript 来进行跟踪 因此这是一个问题 是否可以在不运行 javascript 客户端服务器端的情况下解决此问题 也许这
  • Sails.js 如何修改路由以解释逗号分隔的 id 列表

    根据一些 JSON API 规范 例如http jsonapi org format urls individual resources http jsonapi org format urls individual resources 服
  • Bash:执行存储在变量中的命令[重复]

    这个问题在这里已经有答案了 我正在编写一个脚本 其中一部分没有按我的预期工作 为了简单起见 我在一个简单的例子中分解了这一部分 echo echo gt tmp while read cmd do cmd done 在这里 我希望 cmd
  • mongodb有路径通配符吗?

    我有一个 mongodb 集合 其中每个文档都有一个树结构 第一个级别是国家 地区代码 第二个级别是操作系统 第三个级别是处理器类型 最后的值是性能分数 AU OSX x86 64 17 4 RU Android A9 14 2 x86 7
  • 如何从Excel中读取数据并逐行写入文本文件?

    我想编写代码从 Excel 获取数据并将其写入文本文件 这是我的代码 import xlrd import os path wb xlrd open workbook os path join D TRB 2014 Data SPS1 de
  • 为什么 std::string 不是 std::vector 的特化? [复制]

    这个问题在这里已经有答案了 将字符串视为字符向量似乎是显而易见的 那么为什么 string 有它自己的特殊实现 它看起来与向量类有很大不同呢 只是为了说明这一点 这里有两个课程的一些片段 以表明所需的工作非常相似 例如两者都使用分配器来管理
  • 页面刷新期间的 selenium.common.exceptions.StaleElementReferenceException

    页面包含一些数据 行数很少的表 有 刷新 按钮 可以重新加载和重新绘制页面上的某些元素 而无需重新加载静态数据 ajax 我正在尝试为该页面创建适当的测试 但有时会出现 StaleElementReferenceException 我的代码
  • 多元二分法

    我需要一种算法来执行二维二分法来解决 2x2 非线性问题 示例 两个方程f x y 0 and g x y 0我想同时解决这个问题 我非常熟悉一维二分 以及其他数值方法 假设我已经知道解决方案位于界限之间x1 lt x lt x2 and
  • 在 Android 上的活动之间保持蓝牙连接 [重复]

    这个问题在这里已经有答案了 可能的重复 Android 如何将蓝牙连接传递给另一个活动 https stackoverflow com questions 6872970 android how to pass a bluetooth co
  • 默认情况下,PHPUnit 模拟对象从未期望过

    如果没有正式定义的期望 有没有办法告诉 phpunit 模拟对象永远不要期望方法调用 在我看来 不要对每种方法都抱有期望是没有道理的 所以 phpunit 没有任何功能 仅当您想完全确保某些方法不会被调用时 才应使用 从不 期望 无论如何
  • 查找每个逗号后的第二个空格

    This is a follow up to this question Concatenate previous and latter words to a word that match a condition in R https s
  • 如何更新猫鼬中的特定字段?

    我有一个数据集是 var JobSchema Schema candidates user type Schema Types ObjectId ref User status type String default In Progress
  • 如何使用私钥对字符串进行签名

    如何使用以下方式获取字符串的签名SHA1withRSA如果我已经拥有私钥byte or String 我想你所说的是你事先知道密钥对并且想用它来签名 验证 请看下面的代码 import java security KeyPair impor
  • 针对 SSE2 之前的处理器的 Java 运行时如何实现浮点基本运算?

    针对没有 SSE2 的 Intel 处理器的 Java 运行时如何处理浮点非规格化 当strictfp is set 即使 387 FPU 设置为 53 位精度 它也会保持超大的指数范围 强制检测每个中间结果的下溢 溢出 以及 使得很难避免
  • Python JSON AttributeError:“str”对象没有属性“read”

    我是 Python 初学者 Python 3 7 6 import json fil numbers json num with open fil r as file for obj in file num append json load
  • 如何用一个命令停止 mongo DB

    我需要能够在 cli 上启动 停止 MongoDB 开始非常简单 mongod 但要停止 mongo DB 我需要先运行 open mongo shell 然后键入两个命令 蒙戈 使用管理员 db shutdownServer 所以我不知道
  • shark不显示源代码

    我们正在尝试在 iPhone 应用程序上运行 shark 然而 在分析的样本中 它没有列出我们的任何应用程序功能 所有列出的都是库 当我们单击其中任何一个时 汇编代码都是可见的 大多数网站在构建应用程序时都会提到 生成调试符号 选项 我也找
  • 包括使用 Lambda 表达式

    在基于字符串的重载中Include我们指定包含一个集合 然后简单地通过以正确的顺序指定相关导航属性来包含下一层的引用 query Include Level1Collection Level2Reference 但是为什么当使用重载时Inc
  • Android 的自定义类加载器?

    我正在编写一个仪器库 我想在桌面和移动设备 Android 上使用它 它的功能是 公开一个带有单个参数的 main 即目标类的 main 安装一个类加载器 在加载所有类时拦截它们并对其进行检测 Like so Expects args 0