`
anson_xu
  • 浏览: 503518 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

典型应用之——将库打进apk

阅读更多

典型应用之——将库打进apk

(2010-12-17 19:19:26)
标签:

it

分类: android开发

 

1.    介绍
应用程序时常需要调用 C 库,并通过 apk 包安装到系统当中。我们可以通过 NDK 来安装库,如果你有源代码开发环境,可以通过 Android.mk 脚本很简单地将 java 程序和 c 库放在一个项目中编译和安装。

2.    原理
利用在 Android.mk 中加 LOCAL_JNI_SHARED_LIBRARIES 指定安装库

3.    例程

1)        功能
将加法用 c 语言实现,并编成 so 库,在 Java 层通过 JNI 方式调用它,并将界面和库打成一个 apk 包安装

2)        可从此处下载可独立运行的代码
http://download.csdn.net/source/2841528

3)        核心代码及说明

a)         java 程序
package com.android.mylib;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MyLibActivity extends Activity {
         @Override
         public void onCreate(Bundle savedInstanceState) {
                   super.onCreate(savedInstanceState);

                   TextView tv = new TextView(this);
                   int x = 55;
                   int y = 8;
                   int z = 0;

                   System.loadLibrary("test");       //
装载 libtest.so
                   z = testme(x, y); //
调用 JNI
                  tv.setText(x + "+" + y + "=" + z);
                   setContentView(tv);
         }

         public native int testme(int x, int y);    //
声明 JNI
}

b)        项层 Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := user eng
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := mylib
LOCAL_JNI_SHARED_LIBRARIES := libtest //
安装库

include $(BUILD_PACKAGE)
include $(LOCAL_PATH)/jni/Android.mk  //
调用库的编译

include $(call all-makefiles-under,$(LOCAL_PATH))

c)         jni 程序 C 程序实现
#include <jni.h>

JNIEXPORT jint JNICALL Java_com_android_mylib_MyLibActivity_testme
(JNIEnv *env, jobject obj, jint x, jint y) { // JNI
的实现
         return x + y;
}

d)        jni Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

|LOCAL_MODULE_TAGS := user eng
LOCAL_MODULE := libtest

LOCAL_SRC_FILES := jnitest.c
LOCAL_C_INCLUDES += \
    $(JNI_H_INCLUDE)
LOCAL_PRELINK_MODULE := false

include $(BUILD_SHARED_LIBRARY) //
编译 so

4)        执行结果
安装 apk 包后 adb shell 进入手机系统 然后 ls /data/data/com.android.mylib/lib/ 可以看到库被安装到此处

2.    注意
对库进行调试不能 adb install -r, 要先 uninstall, 否则有时覆盖不了库

3.    参考

1)        c 回调 java 函数 , 可参数
http://blog.sina.com.cn/s/blog_4b650d650100lw43.html

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics