`
anson_xu
  • 浏览: 509581 次
  • 性别: 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

分享到:
评论

相关推荐

    安卓Android源码——更换软件主题(apk方式).rar

    4. **插件化主题**:更高级的实现方式是将主题做成插件APK,用户可以在应用商店下载安装。这样的主题APK包含独立的资源文件,通过动态加载来改变应用界面。这涉及到更复杂的权限管理、资源解析和插件化框架的实现。 ...

    Android源码——实现皮肤打包成apk的demo.zip

    本教程通过一个名为"Android源码——实现皮肤打包成apk的demo"的示例项目,来详细介绍如何在Android中实现这一功能。 首先,我们需要理解皮肤的基本概念。在Android应用中,皮肤通常指的是改变应用界面颜色、图标、...

    安卓Android源码——更换软件主题(apk方式).zip

    本教程将通过一个名为“安卓Android源码——更换软件主题(apk方式)”的示例项目,深入讲解如何在Android应用中实现主题更换。 首先,我们来理解主题的概念。在Android中,主题是通过样式(Style)和主题资源...

    安卓Android源码——实现皮肤打包成apk的demo.zip

    本教程通过一个源码示例——"安卓Android源码——实现皮肤打包成apk的demo",来详细介绍如何将皮肤资源打包成可独立安装的APK文件。这个过程涉及到的关键知识点包括:APK文件结构、资源管理、构建流程以及动态加载。...

    [Android Studio应用开发——基础入门与应用实战][方欣,杨勃][电子课件]

    【Android Studio应用开发——基础入门与应用实战】是针对初学者和希望提升Android应用程序开发技能的人群设计的一门课程。这门课程由专家方欣和杨勃共同编写,旨在通过电子课件的形式,深入浅出地讲解Android ...

    Android应用——imsi.apk

    Android应用程序,安装在手机后,轻松获取imsi号码,方便开发和测试人员使用。

    Linux下用NDK和SDK工具将库文件打包进apk应用.pdf

    Linux下用NDK和SDK工具将库文件打包进apk应用.pdfLinux下用NDK和SDK工具将库文件打包进apk应用.pdf

    查看微信应用签名工具——base.apk.rar

    - 使用"查看微信应用签名工具",首先需要将APK文件传输到Android设备。 - 安装该工具后,打开应用并选择要查看签名的已安装应用,例如微信。 - 工具会显示应用的签名信息,包括证书的SHA-1指纹、MD5指纹以及证书...

    离线人脸识别门禁考勤——Android设备端APK及源码免费下载

    适用场景:门禁场景的应用,适合安装在Android系统的门口机、闸机头、Pad等设备上。 主要功能:人员注册、人脸识别开门、考勤打卡、门禁权限管理、识别记录查询等。 激活有问题or需要源码,请加微信Hongzhushou2

    1.游戏插件——必须安装.apk

    1.游戏插件——必须安装.apk

    安卓Android源码——从安卓手机ROM包提取APK工具.zip

    这个压缩包"安卓Android源码——从安卓手机ROM包提取APK工具.zip"显然提供了帮助开发者从ROM包中提取APK应用的工具,这对于定制ROM、系统优化或者逆向工程等任务非常有用。下面我们将详细探讨这一主题。 首先,我们...

    IOS应用源码——widgetpress-BigRaceClient-6931310.rar

    【标题】"IOS应用源码——widgetpress-BigRaceClient-6931310.rar" 提供的是一个iOS应用程序的源代码,名为“BigRaceClient”。这个项目可能是一个专门为竞赛或者比赛类活动设计的应用,由WidgetPress开发。源码版本...

    android将lib库打包成apk安装

    本教程将详细解释如何将C编写的动态链接库(.so文件,即lib库)整合到Android应用中,并打包成APK进行安装。 1. **创建JNI接口** 在Java代码中,我们需要定义JNI接口,这些接口将被C/C++代码实现。使用`native`...

    Android系统预装APK——为什么加入的apk没有显示出来?

    将我们需要的APK预置进系统: 以预置WeChat的APK为例 (1)在packages/apps下面创建和APK名字一样的目录(2)将WeChat.apk放到packages/apps/WeChat下面(3)在packages/apps/WeChat里创建Android.mk文件: LOCAL_...

    Android动态加载(下)——加载已安装APK中的类和资源

    本文将深入探讨如何在已安装的APK中加载类和资源,这在提高用户体验和减少版本迭代成本方面具有重要意义。 动态加载的核心在于对Android系统的ClassLoader的扩展和理解。Android系统默认使用DexClassLoader来加载...

    特制生日礼物——拼图游戏APK

    直接下载安装,同时我也上传了源代码分享,详情见个人博客 http://blog.csdn.net/jjzhoujun2010

    APK权限大选———Android开发必懂知识

    而Android作为全球最受欢迎的移动操作系统之一,其应用程序(APK)的权限管理变得尤为重要。本文将深入探讨Android APK权限的重要性、常见的权限类型及其作用,旨在帮助开发者更好地理解和管理这些权限,同时也让...

Global site tag (gtag.js) - Google Analytics