Hi,
I had posted this question earlier in the Android-Beginners list but
didn't get any response :(
Saw this thread here and thought of trying my luck again!
Can someone help me with the steps to export a service to another
android application?
I have created a service and defined an interface which is exposed by
the service. I want to be able to get a reference to this interface in
another android application.
package scratch.service;
Service: DbService
Interface: DbServiceInterface (aidl filename is
DbServiceInterface.aidl)
In the AndroidMainfest.xml for the Service:
I have these lines:
---
<permission android:name="scratch.permission.DB_SERVICE_KEY"
android:label="DbServicePermission"
android:description="@string/perm_desc"
android:protectionLevel="dangerous"/>
<uses-permission
android:name="scratch.application.permission.DB_SERVICE_KEY"/>
<application android:label="@string/app_name">
<!-- Export this service so that it can be used -->
<service
android:name=".DbService"
android:exported="true"
android:enabled="true"
android:permission="scratch.permission.DB_SERVICE_KEY">
<intent-filter>
<action android:name="MyDbService" />
</intent-filter>
</service>
---
Now, moving onto the the client application that uses the Service:
package scratch.activity
Activity: DbActivity
In the AndroidMainfest.xml for the Activity:
---
<uses-permission
android:name="scratch.permission.DB_SERVICE_KEY" />
<application android:label="@string/app_name">
<activity android:name=".DbActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
---
I have imported scratch.service.DbServiceInterface in the source-file
for the Activity but while building I used to get:
---
compile:
[javac] Compiling 2 source files to /home/rohan/workspace/projects/
android/MyDatabaseActivity/bin/classes
[javac] /home/rohan/workspace/projects/android/MyDatabaseActivity/
src/scratch/activity/DbActivity.java:17: cannot find symbol
[javac] symbol : class DbServiceInterface
[javac] location: package scratch.service
[javac] import scratch.service.DbServiceInterface;
[javac] ^
[javac] /home/rohan/workspace/projects/android/MyDatabaseActivity/
src/scratch/activity/DbActivity.java:22: cannot find symbol
[javac] symbol : class DbServiceInterface
[javac] location: class scratch.activity.DbActivity
[javac] private DbServiceInterface refService = null;
[javac] ^
[javac] /home/rohan/workspace/projects/android/MyDatabaseActivity/
src/scratch/activity/DbActivity.java:110: package DbServiceInterface
does not exist
[javac] refService =
DbServiceInterface.Stub.asInterface(service);
[javac] ^
[javac] 3 errors
---
To overcome this, I used:
'ant -libs <path-to-classes dir for the service>'
Build errors disappear but while starting the Activity, I get:
01-09 12:05:22.577: INFO/ActivityManager(52): Starting activity:
Intent { action=android.intent.action.MAIN categories=
{android.intent.category.LAUNCHER} flags=0x10200000 comp=
{scratch.activity/scratch.activity.DbActivity} }
01-09 12:05:22.978: INFO/ActivityManager(52): Start proc
scratch.activity for activity scratch.activity/.DbActivity: pid=1613
uid=10018 gids={}
01-09 12:05:23.117: INFO/jdwp(1613): received file descriptor 20 from
ADB
01-09 12:05:24.008: WARN/dalvikvm(1613): VFY: unable to find class
referenced in signature (Lscratch/service/DbServiceInterface;)
01-09 12:05:24.047: WARN/dalvikvm(1613): VFY: unable to resolve
interface method 61: Lscratch/service/DbServiceInterface;.getNames ()
[Ljava/lang/String;
01-09 12:05:24.057: WARN/dalvikvm(1613): VFY: rejecting opcode 0x72
at 0x0012
01-09 12:05:24.067: WARN/dalvikvm(1613): VFY: rejected Lscratch/
activity/DbActivity$3;.onClick (Landroid/view/View;)V
01-09 12:05:24.067: WARN/dalvikvm(1613): Verifier rejected class
Lscratch/activity/DbActivity$3;
01-09 12:05:24.087: DEBUG/AndroidRuntime(1613): Shutting down VM
01-09 12:05:24.087: WARN/dalvikvm(1613): threadid=3: thread exiting
with uncaught exception (group=0x40010e28)
01-09 12:05:24.177: ERROR/AndroidRuntime(1613): Uncaught handler:
thread main exiting due to uncaught exception
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): java.lang.VerifyError:
scratch.activity.DbActivity$3
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
scratch.activity.DbActivity.<init>(DbActivity.java:53)
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
java.lang.Class.newInstance(Native Method)
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
android.app.Instrumentation.newActivity(Instrumentation.java:1096)
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:
2060)
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:
2156)
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
android.app.ActivityThread.access$1800(ActivityThread.java:112)
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1580)
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
android.os.Handler.dispatchMessage(Handler.java:88)
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
android.os.Looper.loop(Looper.java:123)
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
android.app.ActivityThread.main(ActivityThread.java:3742)
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
java.lang.reflect.Method.invokeNative(Native Method)
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
java.lang.reflect.Method.invoke(Method.java:515)
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
(ZygoteInit.java:739)
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:497)
01-09 12:05:24.257: ERROR/AndroidRuntime(1613): at
dalvik.system.NativeStart.main(Native Method)
01-09 12:05:24.437: INFO/Process(52): Sending signal. PID: 1613 SIG: 3
01-09 12:05:24.569: INFO/dalvikvm(1613): threadid=7: reacting to
signal 3
01-09 12:05:24.858: INFO/dalvikvm(1613): Wrote stack trace to '/data/
anr/traces.txt'
Please let me know why:
[1] VerifyException(s) are thrown
[2] what more I need to do to use a service across Andy Apps
I read earlier that we need to compile the aidl in both the packages.
So my question is: if tomorrow someone else wants to use a service
written by me, does he have to include the aidl that I write while
building his apk?
In the above steps does 'ant- libs' take care of this? I am still
confused!
Thanks!
Rohan
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---