I just splitted my App in a Pro and Free version. Therefore I made my application a library and created two new projects.
The free version kept the namespace "com.mxp.time" and the pro version got the namespace "com.sourcecastle.mytime".
So the free version has the same namespace as my library.
Everything works fine except when I start a activity from preference activity in the pro version.
There I get:
Permission Denial: starting Intent { act=android.intent.action.VIEW cmp=com.mxp.time/.DataManagementActivity } from ProcessRecord{45461048 30784:com.sourcecastle.mytime/u0a10012} (pid=30784, uid=10012) not exported from uid 10013
My Preferences.xml looks like:
<!-- datamanagement -->
<PreferenceCategory
android:key="datamanagement_category"
android:title="@string/settings_datamanagement_title" >
<Preference
android:summary="@string/settings_datamanagement_pref_message"
android:title="@string/settings_datamanagement_pref_title" >
<intent
android:action="android.intent.action.VIEW"
android:targetClass="com.mxp.time.DataManagementActivity"
android:targetPackage="com.mxp.time" />
</Preference>
</PreferenceCategory>
And my manifest:
<activity
android:name="com.mxp.time.DataManagementActivity"
android:exported="true"
android:label="@string/datamanagement_title" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
I already set
“android:exported="true"
in my manifest but I still get an exception.
Additionally I have a general question: Where should I define my activities now? In the library or in the real application? I tried to remove all permissions and activities from my library project and my app keeps working. But since I got this problem I ask myself if this isn’t a security issue because registering my activities in my application only lets me override settings like “exported”…
Can anyone help me understand that?
UPDATE:
This seems to work:
<!-- datamanagement -->
<PreferenceCategory
android:key="datamanagement_category"
android:title="@string/settings_datamanagement_title" >
<!-- <Preference -->
<!-- android:summary="@string/settings_datamanagement_pref_message" -->
<!-- android:title="@string/settings_datamanagement_pref_title" > -->
<!-- <intent -->
<!-- android:action="android.intent.action.VIEW" -->
<!-- android:targetClass="com.mxp.time.DataManagementActivity" -->
<!-- android:targetPackage="com.mxp.time" /> -->
<!-- </Preference> -->
<PreferenceScreen
android:summary="@string/settings_datamanagement_pref_message"
android:title="@string/settings_datamanagement_pref_title" >
<intent android:action="com.mxp.time.DataManagementActivity" />
</PreferenceScreen>
</PreferenceCategory>
and:
<activity
android:name="com.mxp.time.DataManagementActivity"
android:exported="true"
android:label="@string/datamanagement_title" >
<intent-filter>
<action android:name="com.mxp.time.DataManagementActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
And my other question is ansered here: Android Library Manifest vs. App Manifest