Android 尝试启动库项目活动

Android 尝试启动库项目活动,android,android-library,Android,Android Library,我有一个库项目和主项目,我尝试从主项目开始在库项目中定义的活动 Intent intent = new Intent("isr.LAUNCH"); intent.setComponent(new ComponentName("com.ISR", "com.ISR.activity.CameraActivity")); startActivity(intent); 但我收到以下例外情况: 05-14 17:13:42.853: E/AndroidRuntime(29217): java.lang

我有一个库项目和主项目,我尝试从主项目开始在库项目中定义的活动

Intent intent = new Intent("isr.LAUNCH");
intent.setComponent(new ComponentName("com.ISR", "com.ISR.activity.CameraActivity"));
startActivity(intent);
但我收到以下例外情况:

05-14 17:13:42.853: E/AndroidRuntime(29217): java.lang.SecurityException: Permission Denial: starting Intent { act=isr.LAUNCH cmp=com.ISR/.activity.CameraActivity } from ProcessRecord{40aa7178 29217:com.ssbs.sw.SWE/10094} (pid=29217, uid=10094) requires null
05-14 17:13:42.853: E/AndroidRuntime(29217):    at android.os.Parcel.readException(Parcel.java:1322)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at android.os.Parcel.readException(Parcel.java:1276)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1351)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1374)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at android.app.Activity.startActivityForResult(Activity.java:2827)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:817)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at android.app.Activity.startActivity(Activity.java:2933)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at com.ssbs.sw.IR.view.MainActivity$1$1.onMenuItemClick(MainActivity.java:58)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at com.ssbs.sw.SWE.actionbarV5.menu.MenuButtonHelper$1.onClick(MenuButtonHelper.java:108)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at android.view.View.performClick(View.java:2492)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at android.view.View$PerformClick.run(View.java:9087)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at android.os.Handler.handleCallback(Handler.java:587)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at android.os.Handler.dispatchMessage(Handler.java:92)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at android.os.Looper.loop(Looper.java:130)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at android.app.ActivityThread.main(ActivityThread.java:3740)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at java.lang.reflect.Method.invokeNative(Native Method)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at java.lang.reflect.Method.invoke(Method.java:507)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:638)
05-14 17:13:42.853: E/AndroidRuntime(29217):    at dalvik.system.NativeStart.main(Native Method)
这是我的库项目清单:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >

        <activity android:name=".activity.CameraActivity" android:exported="true" >
            <intent-filter>
                <action android:name="isr.LAUNCH" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>

主应用程序的清单必须包含它希望使用的所有活动定义。库项目中不需要它们,因为它们不是从那里调用的

库清单中的任何活动定义实际上都不起任何作用


更新:您现在可以像其他答案所提到的那样合并清单文件。

您实际上可以在库的清单中声明所需的所有内容,然后在主项目中声明

manifestmerger.enabled=true

在您的project.properties中。它实际上是合并您的清单,您可以在bin文件夹中看到生成的清单。

将权限移动到您的主项目而不是库项目?@NirvanaTikku我在主项目清单中有相同的权限尝试清理和重建这两个项目以防万一。并且无法启动库在主项目清单中未定义主项目的项目活动?为什么我会收到安全异常?正确。您希望使用的所有活动必须在应用程序清单中定义。即使您使用Admob,Admob库中的活动也必须在您自己的清单中注册,否则系统无法启动它们。它适用于更新的ADT(版本20 preview 3)及更高版本,您需要将其添加到应用程序项目的project.properties文件中。它确实已添加到SDK Tools,版本20,但这并不意味着你不能用它来编译以前的应用程序。我确实说过它要包含在项目中。应用程序项目的属性。干杯当project.properties现在为gradle.properties时,如何配置合并?
<activity android:name="com.ISR.activity.CameraActivity">
            <intent-filter>
                <action android:name="isr.LAUNCH" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
Intent intent = new Intent("isr.LAUNCH");
startActivity(intent);
manifestmerger.enabled=true