A.apk 使用aidl调用B.apk的Service的函数 B.apk package="com.eddy.android.aidlcall" 新建一个IRemoteService.aidl文件 package com.eddy.android.aidlcall; interface IRemoteService { void manualUpdate(String location); void cancelUpdate(); } 新建一个RemoteService.class文件 public class RemoteService extends Service { @Override public IBinder onBind(Intent arg0) { return mBinder; } private final IBinder mBinder = new ServiceStub(this); static class ServiceStub extends IRemoteService.Stub{ WeakReference<RemoteService> mService; public ServiceStub(RemoteService service) { mService = new WeakReference<RemoteService>(service); } public void cancelUpdateWeather() throws RemoteException { .... //做你想做的。 } public void manualUpdateWeather(String location) throws RemoteException { ...... //做你想做的。 } } } 在Android.mk LOCAL_SRC_FILES := $(call all-java-files-under, src) / src/com/eddy/android/aidlcall/IWeatherRemoteService.aidl 在AndroidManifest.xml <service android:name="RemoteService"> <intent-filter> <action android:name="android.intent.action.WEATHER_SERVICE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </service> A.apk 使用B.apk的Service的函数。 在Activity中 private IRemoteService mService = null; protected void onCreate(Bundle savedInstanceState){ bindService(new Intent("android.intent.action.WEATHER_SERVICE"), mServiceConn, Context.BIND_AUTO_CREATE); } @Override protected void onDestroy() { unbindService(mServiceConn);// 取消service邦定 super.onDestroy(); } private void method(){ mService.cancelUpdateWeather(); //--调用B.apk中的函数 mService.manualUpdateWeather(null); //--调用B.apk中的函数 } private ServiceConnection mServiceConn = new ServiceConnection(){ public void onServiceConnected(ComponentName name, IBinder service) { mService = IWeatherRemoteService.Stub.asInterface(service); } public void onServiceDisconnected(ComponentName name) { //mService = null; //关闭service. } }; 注意: 将B.apk的IRemoteService.aidl文件生成的IRemoteService.java文件拷到a.apk的package下。