【发布时间】:2014-02-26 20:04:54
【问题描述】:
我有 service.apk 正在使用资源在状态栏中显示通知。
我正在动态加载使用这些资源的类,但是通知的资源不知何故消失了,我收到了这个错误:
W/ResourceType( 1142): No known package when getting value for resource number 0x7f020001
W/StatusBarIconView( 1142): Icon not found in 2130837505: 7f020001
W/StatusBarIconView( 1142): No icon for slot android/0x20
W/ActivityManager( 941): crashApplication: trying to crash self!
D/NotificationService( 941): onNotification error pkg=android tag=null id=32; will crashApplication(uid=1000, pid=941)
W/StatusBar( 1142): removeNotification for unknown key: android.os.BinderProxy@41b166b8
动态加载的代码:
PathClassLoader classLoader =
new PathClassLoader("system/app/ServiceImpl.apk",
ClassLoader.getSystemClassLoader());
Class someClass =
classLoader.loadClass("com.bla.ServiceImpl");
Constructor<Class> ctor = someClass.getConstructor(Context.class);
Object someObject = ctor.newInstance(context);
我在想也许我加载 apk 的方式是错误的?也许我应该为资源添加路径?
任何帮助将不胜感激!
【问题讨论】:
-
这看起来会非常复杂,如果它甚至可能的话。在您认为这是实现它的方法方面,您真正想要实现的功能是什么?
-
service.apk 正在使用资源在状态栏(而不是下拉菜单)中显示通知,这只能使用资源。我需要动态加载该 service.apk 并让它仍然显示通知...
-
但是您希望通过动态加载服务 apk 来实现什么?它不太可能做到你想象的那样。
-
@ChrisStratton 那是因为 service.apk 的代码位于与我加载它的位置不同的分区中。我必须这样做......
-
但是你为什么要加载服务apk呢?您认为通过在属于您的应用程序用户 ID 的进程中启动它,而不是让系统以通常的方式将其作为自己的进程启动,您将能够做什么?这个资源问题可能会分散人们对这个不寻常方案的真正困难的注意力。
标签: android apk dynamic-loading