我正在开发一个基于Android的小型应用程序,该应用程序负责将外部代码作为插件的形式加载。应用程序作为位于SD卡上的dex编译类(任务)的运行时环境,同时提供这些任务/测试的概述。
我们说我有一个服务类,一个测试类(存储在sdcard上)。 当我的应用程序启动时,服务和测试类将加载到我的应用程序中。通过通用界面,测试类可以访问所有可用的服务。
其中一个测试需要多个服务。当我启动我的应用程序并运行此测试时,我收到以下错误:
$types = [];
$binds = [];
$values = [];
foreach ($taskTypes as $taskType) {
$types[] = \PDO::INT;
$binds[] = '?';
$values[] = $taskType;
}
// Get Entity Manager from wherever
$conn = $entityManager->getConnection();
$stmt = $conn->executeQuery("SELECT COUNT(DISTINCT
t.int_task_type_id) as a_count
FROM tbl_xref_people_task t
WHERE t.bit_completed = true AND
t.int_people_id = :peopleId AND
t.int_task_type_id IN (" . implode(',', $binds) . ")",
$values,
$types
);
$stmt->execute();
$stmt->fetchAll(); // Fetch
首先我想到的是,在我的应用程序中,使用了另一个 ClassLoader 。我已经检查过,但应用程序只使用了一个 ClassLoader 。
它似乎与运行该应用程序的设备/手机无关。
对于加载外部dex类,我使用:org.smali:dexlib2:2.0.3
最后我使用了多个引起上述问题的ClassLoader。