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

本文介绍如何使用NDK将C语言编写的库打包进APK,并通过JNI在Java层调用该库。具体步骤包括定义Java接口、配置Android.mk文件、编写C层实现等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

典型应用之——将库打进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.youkuaiyun.com/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值