【问题标题】:android : how to start activity defined in library projectandroid:如何启动库项目中定义的活动
【发布时间】:2012-04-18 02:17:54
【问题描述】:

我正在开发一个使用 androidVNC Viewer 作为库项目的 android 应用程序,但我无法从 androidVNC 启动一个活动(活动未找到异常)。

另外,我如何捆绑一个库项目并将其用作一个 apk?

更新

我正在使用以下意图调用:

Intent call= new Intent("android.androidVNC.androidVNC.LAUNCH");
startActivity(call);

更新 2 使用以下代码后,我想我可以开始活动,但得到 this (java.lang.NoSuchFieldError: android.androidVNC.R$id.textIP) 错误...

Intent vnc_call = new Intent(getApplicationContext(), androidVNC.class);
            vnc_call.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(login);

在我检查了 R.java、androidVNC original 和 androidVNC 用作库时(在生成的 java 文件下)...我得到的是 textip 在原始 R.java 中有,但它是调用项目中(生成的java文件)的R.java中没有。

logcat 的 O/P(前几行)


04-05 01:34:18.135: W/dalvikvm(479): 无法解析 Landroid/androidVNC/AbstractConnectionBean 的超类; (256)
04-05 01:34:18.135: W/dalvikvm(479): 类 'Landroid/androidVNC/AbstractConnectionBean;' 的链接失败的
04-05 01:34:18.135: W/dalvikvm(479): 无法解析 Landroid/androidVNC/ConnectionBean 的超类; (8)
04-05 01:34:18.135: W/dalvikvm(479): 类'Landroid/androidVNC/ConnectionBean;'的链接失败的
04-05 01:34:18.145: W/dalvikvm(479): VFY: 找不到签名中引用的类 (Landroid/androidVNC/ConnectionBean;)
04-05 01:34:18.155: W/dalvikvm(479): 无法解析 Landroid/androidVNC/AbstractConnectionBean 的超类; (256)
04-05 01:34:18.155: W/dalvikvm(479): 类 'Landroid/androidVNC/AbstractConnectionBean;' 的链接失败的
04-05 01:34:18.155: W/dalvikvm(479): 无法解析 Landroid/androidVNC/ConnectionBean 的超类; (8)
04-05 01:34:18.155: W/dalvikvm(479): 类‘Landroid/androidVNC/ConnectionBean;’的链接失败的
04-05 01:34:18.187: W/dalvikvm(479): 无法解析 Landroid/androidVNC/AbstractConnectionBean 的超类; (256)
04-05 01:34:18.187: W/dalvikvm(479): 类 'Landroid/androidVNC/AbstractConnectionBean;' 的链接失败的
04-05 01:34:18.187: W/dalvikvm(479): 无法解析 Landroid/androidVNC/ConnectionBean 的超类; (8)`

04-05 01:34:18.135: W/dalvikvm(479): 无法解析 Landroid/androidVNC/AbstractConnectionBean 的超类; (256)
04-05 01:34:18.135: W/dalvikvm(479): 类 'Landroid/androidVNC/AbstractConnectionBean;' 的链接失败的
04-05 01:34:18.135: W/dalvikvm(479): 无法解析 Landroid/androidVNC/ConnectionBean 的超类; (8)
04-05 01:34:18.135: W/dalvikvm(479): 类'Landroid/androidVNC/ConnectionBean;'的链接失败的
04-05 01:34:18.145: W/dalvikvm(479): VFY: 找不到签名中引用的类 (Landroid/androidVNC/ConnectionBean;)
04-05 01:34:18.155: W/dalvikvm(479): 无法解析 Landroid/androidVNC/AbstractConnectionBean 的超类; (256)
04-05 01:34:18.155: W/dalvikvm(479): 类 'Landroid/androidVNC/AbstractConnectionBean;' 的链接失败的
04-05 01:34:18.155: W/dalvikvm(479): 无法解析 Landroid/androidVNC/ConnectionBean 的超类; (8)
04-05 01:34:18.155: W/dalvikvm(479): 类‘Landroid/androidVNC/ConnectionBean;’的链接失败的
04-05 01:34:18.187: W/dalvikvm(479): 无法解析 Landroid/androidVNC/AbstractConnectionBean 的超类; (256)
04-05 01:34:18.187: W/dalvikvm(479): 类 'Landroid/androidVNC/AbstractConnectionBean;' 的链接失败的
04-05 01:34:18.187: W/dalvikvm(479): 无法解析 Landroid/androidVNC/ConnectionBean 的超类; (8)

有什么线索吗?

【问题讨论】:

  • 你在清单中声明了吗?
  • 是的..我已经宣布了
  • 您使用的是什么 Android SDK 版本,r17?
  • sdk 修订版 16...和 ​​api 9...

标签: android android-activity android-library


【解决方案1】:

即使库项目有自己的 AndroidManifest.xml,它的内容也不会添加到您的构建中。如果您打算使用库中包含的通常在清单中声明的​​任何内容,则必须将它们复制到您的实际应用程序清单中。这包括活动、广播接收器、服务、权限等。

【讨论】:

  • 感谢您的回复,我已经将所有内容都包含在内了...但仍然找不到活动异常..
  • 根据您更新的代码,您不是通过其类名启动活动,而是根据其操作启动它。清单中的活动条目是否包含<intent-filter> 部分,以及诸如<action android:name="android.androidVNC.androidVNC.LAUNCH" /> 之类的操作?如果没有,这就是您无法找到该活动的原因。您可以更改清单以在意图过滤器中声明操作(您可能还需要将<category android:name="android.intent.category.DEFAULT" /> 添加到过滤器,我不确定)或更改您定义意图的方式。
  • 谢谢,但它没有帮助......即使我使用 {Intent call = new Intent(getApplicationContext(), android.androidVNC.androidVNC.class);} 我得到同样的错误..跨度>
  • Android Studio 现在可以按照您期望的方式合并 AndroidManifest.xml 文件和资源。因此,您现在可以在库 AndroidManifest.xml 中定义您的库活动。
  • @mah 你确定需要在清单中定义广播接收器吗?我已经使用 BroadcastReceiver 在库项目中获取 USB 通知,并且它没有在主应用程序的清单(使用库的应用程序)或库的清单中定义。但话又说回来,Android 的 USB 的行为是如此奇怪,以至于它在那里工作的事实可能是 USB 的一个怪癖。
【解决方案2】:

假设 lib 和 app 有不同的命名空间:

当按照 mah 的描述将 lib-manifest-info 与 app-manifest 合并时,您是否在 Activity 中包含了不同的命名空间?

    <application ... >
        <activity
            android:name=".MyActivity" >...

到

    <application ... >
        <activity
            android:name="my.namespace.MyActivity" >...

使用最新的 eclipse-android 工具 1.7 也可能有所帮助。详情见how-to-consume-reusable-gui-element-widget-with-resources-in-android

【讨论】:

  • 即使布局名称也不应该相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多