From 58052056c052eb0f01554c18d2f224638e836450 Mon Sep 17 00:00:00 2001 From: race604 Date: Tue, 3 Feb 2015 20:52:27 +0800 Subject: [PATCH] implement basic aidl service and client Signed-off-by: race604 --- .gitignore | 7 + .idea/.name | 1 + .idea/compiler.xml | 23 +++ .idea/copyright/profiles_settings.xml | 3 + .idea/encodings.xml | 5 + .idea/gradle.xml | 20 +++ .idea/misc.xml | 51 ++++++ .idea/modules.xml | 12 ++ .idea/scopes/scope_settings.xml | 5 + .idea/vcs.xml | 7 + AidlService.iml | 19 ++ build.gradle | 19 ++ client/.gitignore | 1 + client/build.gradle | 26 +++ client/client.iml | 93 ++++++++++ client/proguard-rules.pro | 17 ++ .../com/race604/client/ApplicationTest.java | 13 ++ client/src/main/AndroidManifest.xml | 21 +++ .../java/com/race604/client/MainActivity.java | 96 ++++++++++ client/src/main/res/layout/activity_main.xml | 35 ++++ client/src/main/res/menu/menu_main.xml | 6 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes client/src/main/res/values-w820dp/dimens.xml | 6 + client/src/main/res/values/dimens.xml | 5 + client/src/main/res/values/strings.xml | 9 + client/src/main/res/values/styles.xml | 8 + gradle.properties | 18 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 49896 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 164 ++++++++++++++++++ gradlew.bat | 90 ++++++++++ service/.gitignore | 1 + service/build.gradle | 26 +++ service/proguard-rules.pro | 17 ++ service/service.iml | 94 ++++++++++ .../remoteservice/ApplicationTest.java | 13 ++ service/src/main/AndroidManifest.xml | 31 ++++ .../race604/remoteservice/MainActivity.java | 39 +++++ .../race604/remoteservice/RemoteService.java | 32 ++++ service/src/main/res/layout/activity_main.xml | 12 ++ service/src/main/res/menu/menu_main.xml | 7 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes service/src/main/res/values-w820dp/dimens.xml | 6 + service/src/main/res/values/dimens.xml | 5 + service/src/main/res/values/strings.xml | 9 + service/src/main/res/values/styles.xml | 8 + servicelib/.gitignore | 1 + servicelib/build.gradle | 24 +++ servicelib/proguard-rules.pro | 17 ++ servicelib/servicelib.iml | 94 ++++++++++ .../race604/servicelib/ApplicationTest.java | 13 ++ servicelib/src/main/AndroidManifest.xml | 8 + .../race604/servicelib/IRemoteService.aidl | 7 + servicelib/src/main/res/values/strings.xml | 3 + settings.gradle | 1 + 61 files changed, 1254 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/copyright/profiles_settings.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/scopes/scope_settings.xml create mode 100644 .idea/vcs.xml create mode 100644 AidlService.iml create mode 100644 build.gradle create mode 100644 client/.gitignore create mode 100644 client/build.gradle create mode 100644 client/client.iml create mode 100644 client/proguard-rules.pro create mode 100644 client/src/androidTest/java/com/race604/client/ApplicationTest.java create mode 100644 client/src/main/AndroidManifest.xml create mode 100644 client/src/main/java/com/race604/client/MainActivity.java create mode 100644 client/src/main/res/layout/activity_main.xml create mode 100644 client/src/main/res/menu/menu_main.xml create mode 100644 client/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 client/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 client/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 client/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 client/src/main/res/values-w820dp/dimens.xml create mode 100644 client/src/main/res/values/dimens.xml create mode 100644 client/src/main/res/values/strings.xml create mode 100644 client/src/main/res/values/styles.xml create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 service/.gitignore create mode 100644 service/build.gradle create mode 100644 service/proguard-rules.pro create mode 100644 service/service.iml create mode 100644 service/src/androidTest/java/com/race604/remoteservice/ApplicationTest.java create mode 100644 service/src/main/AndroidManifest.xml create mode 100644 service/src/main/java/com/race604/remoteservice/MainActivity.java create mode 100644 service/src/main/java/com/race604/remoteservice/RemoteService.java create mode 100644 service/src/main/res/layout/activity_main.xml create mode 100644 service/src/main/res/menu/menu_main.xml create mode 100644 service/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 service/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 service/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 service/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 service/src/main/res/values-w820dp/dimens.xml create mode 100644 service/src/main/res/values/dimens.xml create mode 100644 service/src/main/res/values/strings.xml create mode 100644 service/src/main/res/values/styles.xml create mode 100644 servicelib/.gitignore create mode 100644 servicelib/build.gradle create mode 100644 servicelib/proguard-rules.pro create mode 100644 servicelib/servicelib.iml create mode 100644 servicelib/src/androidTest/java/com/race604/servicelib/ApplicationTest.java create mode 100644 servicelib/src/main/AndroidManifest.xml create mode 100644 servicelib/src/main/aidl/com/race604/servicelib/IRemoteService.aidl create mode 100644 servicelib/src/main/res/values/strings.xml create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..affd44f --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +*/build diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..c4e7947 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +AidlService \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..217af47 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,23 @@ + + + + + + diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..e206d70 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..0c2cb3d --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..8100c2f --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + Android + + + Android Lint + + + Java language level migration aids + + + + + Abstraction issues + + + + + + + + + + + + + 1.8 + + + + + + + + + diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..1ddd526 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml new file mode 100644 index 0000000..922003b --- /dev/null +++ b/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..def6a6a --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AidlService.iml b/AidlService.iml new file mode 100644 index 0000000..0bb6048 --- /dev/null +++ b/AidlService.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..741f70e --- /dev/null +++ b/build.gradle @@ -0,0 +1,19 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:1.0.1' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + jcenter() + } +} diff --git a/client/.gitignore b/client/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/client/.gitignore @@ -0,0 +1 @@ +/build diff --git a/client/build.gradle b/client/build.gradle new file mode 100644 index 0000000..fd7e9a8 --- /dev/null +++ b/client/build.gradle @@ -0,0 +1,26 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 21 + buildToolsVersion "21.1.2" + + defaultConfig { + applicationId "com.race604.client" + minSdkVersion 10 + targetSdkVersion 21 + versionCode 1 + versionName "1.0" + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(include: ['*.jar'], dir: 'libs') + compile 'com.android.support:appcompat-v7:21.0.3' + compile project(':servicelib') +} diff --git a/client/client.iml b/client/client.iml new file mode 100644 index 0000000..9125b52 --- /dev/null +++ b/client/client.iml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/proguard-rules.pro b/client/proguard-rules.pro new file mode 100644 index 0000000..93020d6 --- /dev/null +++ b/client/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /home/jing/Tools/android-sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/client/src/androidTest/java/com/race604/client/ApplicationTest.java b/client/src/androidTest/java/com/race604/client/ApplicationTest.java new file mode 100644 index 0000000..3d974f1 --- /dev/null +++ b/client/src/androidTest/java/com/race604/client/ApplicationTest.java @@ -0,0 +1,13 @@ +package com.race604.client; + +import android.app.Application; +import android.test.ApplicationTestCase; + +/** + * Testing Fundamentals + */ +public class ApplicationTest extends ApplicationTestCase { + public ApplicationTest() { + super(Application.class); + } +} \ No newline at end of file diff --git a/client/src/main/AndroidManifest.xml b/client/src/main/AndroidManifest.xml new file mode 100644 index 0000000..cecde6e --- /dev/null +++ b/client/src/main/AndroidManifest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + diff --git a/client/src/main/java/com/race604/client/MainActivity.java b/client/src/main/java/com/race604/client/MainActivity.java new file mode 100644 index 0000000..b83fb71 --- /dev/null +++ b/client/src/main/java/com/race604/client/MainActivity.java @@ -0,0 +1,96 @@ +package com.race604.client; + +import android.content.ComponentName; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.IBinder; +import android.os.RemoteException; +import android.support.v7.app.ActionBarActivity; +import android.os.Bundle; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.Toast; + +import com.race604.servicelib.IRemoteService; + + +public class MainActivity extends ActionBarActivity implements View.OnClickListener { + + private static final String TAG = MainActivity.class.getSimpleName(); + + private IRemoteService mService; + private boolean mIsBound = false; + + private ServiceConnection mServiceConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + Toast.makeText(MainActivity.this, "Service connected", Toast.LENGTH_SHORT).show(); + + mService = IRemoteService.Stub.asInterface(service); + } + + @Override + public void onServiceDisconnected(ComponentName name) { + Toast.makeText(MainActivity.this, "Service disconnected", Toast.LENGTH_SHORT).show(); + + mService = null; + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + findViewById(R.id.bind).setOnClickListener(this); + findViewById(R.id.unbind).setOnClickListener(this); + findViewById(R.id.call).setOnClickListener(this); + } + + private void callRemote() { + + if (mService != null) { + try { + int result = mService.someOperate(1, 2); + Toast.makeText(this, "Remote call return: " + result, Toast.LENGTH_SHORT).show(); + } catch (RemoteException e) { + e.printStackTrace(); + Toast.makeText(this, "Remote call error!", Toast.LENGTH_SHORT).show(); + } + } else { + Toast.makeText(this, "Service is not available yet!", Toast.LENGTH_SHORT).show(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mIsBound) { + unbindService(mServiceConnection); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.bind: + Intent intent = new Intent(IRemoteService.class.getName()); + intent.setClassName("com.race604.remoteservice", "com.race604.remoteservice.RemoteService"); + //intent.setPackage("com.race604.remoteservice"); + bindService(intent, mServiceConnection, BIND_AUTO_CREATE); + mIsBound = true; + break; + case R.id.unbind: + if (mIsBound) { + unbindService(mServiceConnection); + mIsBound = false; + } + break; + case R.id.call: + callRemote(); + break; + } + } +} diff --git a/client/src/main/res/layout/activity_main.xml b/client/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..9983112 --- /dev/null +++ b/client/src/main/res/layout/activity_main.xml @@ -0,0 +1,35 @@ + + + +