Chinaunix首页 | 论坛 | 博客
  • 博客访问: 228610
  • 博文数量: 29
  • 博客积分: 1477
  • 博客等级: 上尉
  • 技术积分: 451
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-06 14:48
文章分类
文章存档

2012年(1)

2011年(14)

2010年(14)

我的朋友

分类: 嵌入式

2010-12-21 16:28:04

自定义Android核心服务实践

Daniel Wood 20101203

转载时请注明出处和作者

文章出处:http://danielwood.cublog.cn

作者:Daniel Wood

------------------------------------------------------------------------

5.    调用CalService服务

CalServiceTest.java文件

package com.example.android.simpleservice;//注意这个路径
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class CalServiceTest extends Activity {
    /** Called when the activity is first created. */
    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        int a = Native.add(1, 1);
        TextView tv = new TextView(this);
        tv.setText( "1 + 1 = " + String.valueOf(Native.add(1,1)) );
        tv.append( " \n3 - 1 = " + String.valueOf(Native.sub(3,1)) );
        tv.append( " \n2 * 3 = " + String.valueOf(Native.mul(2, 3)) );
        tv.append( " \n4 / 2 = " + String.valueOf(Native.div(4, 2)) );
        setContentView(tv);
    }
}
   
class Native{
    static native int add(int a, int b);
    static native int sub(int a, int b);
    static native int mul(int a, int b);
    static native float div(int a, int b);

    static
    {
        System.loadLibrary("JniCal"); //通过load方法得到动态库
    }
}

注意这个类中的Native类以及其路径,它就是在JNI层所对应的classPathName的类及路径。CalServiceTest.java的目录树为:

`-- src

    `-- com

        `-- example

            `-- android

                `-- simpleservice

                    `-- CalServiceTest.java

JNI中相关代码为:

static const char *classPathName = "com/example/android/simpleservice/Native";/

Android.mk文件

TOP_LOCAL_PATH:= $(call my-dir)

LOCAL_PATH:= $(TOP_LOCAL_PATH)
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := samples

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_PACKAGE_NAME := CalServiceTest #App的名字

LOCAL_JNI_SHARED_LIBRARIES := libJniCal

include $(BUILD_PACKAGE)
# Also build all of the sub-targets under this one: the shared library.
include $(call all-makefiles-under,$(LOCAL_PATH))

通过make CalServiceTest得到apk

target Package: CalServiceTest (out/target/product/generic/obj/APPS/CalServiceTest_intermediates/package.apk)
  adding: lib/ (stored 0%)
  adding: lib/armeabi/ (stored 0%)
  adding: lib/armeabi/libJniCal.so (deflated 71%)
 'out/target/common/obj/APPS/CalServiceTest_intermediates/classes.dex' as 'classes.dex'...
Install: out/target/product/generic/system/app/CalServiceTest.apk

在做完以上步骤时,你需要重新生成Android的文件系统镜像system.img,可以通过以下命令重新生成system.img:

out/host/linux-x86/bin/mkyaffs2image out/target/product/generic/system out/target/product/generic/system.img





然后启动模拟器。这时你运行CalServiceTest这个程序是没有任何现象的,因为CalService没有启动。通过adb shell进入到/system/bin目录,然后用./addserverapp启动服务。如果在使用./addserverapp命令的时候提示没有权限,那么退出shell,然后输入命令adb remount,然后再试试。

adb shell
cd system
cd bin
./addserverapp

这时再运行CalServiceTest就可以看到如下图片:

源代码下载

参考文献:

http://blog.chinaunix.net/u/22630/showart_2190320.html

http://dev.10086.cn/blog/?uid-49302-action-viewspace-itemid-477

----------------------------------------------------------------------

《完》



阅读(2223) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~