典型应用之——将库打进apk
(2010-12-17 19:19:26)
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
分享到:
相关推荐
4. **插件化主题**:更高级的实现方式是将主题做成插件APK,用户可以在应用商店下载安装。这样的主题APK包含独立的资源文件,通过动态加载来改变应用界面。这涉及到更复杂的权限管理、资源解析和插件化框架的实现。 ...
本教程通过一个名为"Android源码——实现皮肤打包成apk的demo"的示例项目,来详细介绍如何在Android中实现这一功能。 首先,我们需要理解皮肤的基本概念。在Android应用中,皮肤通常指的是改变应用界面颜色、图标、...
本教程将通过一个名为“安卓Android源码——更换软件主题(apk方式)”的示例项目,深入讲解如何在Android应用中实现主题更换。 首先,我们来理解主题的概念。在Android中,主题是通过样式(Style)和主题资源...
本教程通过一个源码示例——"安卓Android源码——实现皮肤打包成apk的demo",来详细介绍如何将皮肤资源打包成可独立安装的APK文件。这个过程涉及到的关键知识点包括:APK文件结构、资源管理、构建流程以及动态加载。...
【Android Studio应用开发——基础入门与应用实战】是针对初学者和希望提升Android应用程序开发技能的人群设计的一门课程。这门课程由专家方欣和杨勃共同编写,旨在通过电子课件的形式,深入浅出地讲解Android ...
Android应用程序,安装在手机后,轻松获取imsi号码,方便开发和测试人员使用。
Linux下用NDK和SDK工具将库文件打包进apk应用.pdfLinux下用NDK和SDK工具将库文件打包进apk应用.pdf
- 使用"查看微信应用签名工具",首先需要将APK文件传输到Android设备。 - 安装该工具后,打开应用并选择要查看签名的已安装应用,例如微信。 - 工具会显示应用的签名信息,包括证书的SHA-1指纹、MD5指纹以及证书...
适用场景:门禁场景的应用,适合安装在Android系统的门口机、闸机头、Pad等设备上。 主要功能:人员注册、人脸识别开门、考勤打卡、门禁权限管理、识别记录查询等。 激活有问题or需要源码,请加微信Hongzhushou2
1.游戏插件——必须安装.apk
这个压缩包"安卓Android源码——从安卓手机ROM包提取APK工具.zip"显然提供了帮助开发者从ROM包中提取APK应用的工具,这对于定制ROM、系统优化或者逆向工程等任务非常有用。下面我们将详细探讨这一主题。 首先,我们...
【标题】"IOS应用源码——widgetpress-BigRaceClient-6931310.rar" 提供的是一个iOS应用程序的源代码,名为“BigRaceClient”。这个项目可能是一个专门为竞赛或者比赛类活动设计的应用,由WidgetPress开发。源码版本...
将我们需要的APK预置进系统: 以预置WeChat的APK为例 (1)在packages/apps下面创建和APK名字一样的目录(2)将WeChat.apk放到packages/apps/WeChat下面(3)在packages/apps/WeChat里创建Android.mk文件: LOCAL_...
本教程将详细解释如何将C编写的动态链接库(.so文件,即lib库)整合到Android应用中,并打包成APK进行安装。 1. **创建JNI接口** 在Java代码中,我们需要定义JNI接口,这些接口将被C/C++代码实现。使用`native`...
本文将深入探讨如何在已安装的APK中加载类和资源,这在提高用户体验和减少版本迭代成本方面具有重要意义。 动态加载的核心在于对Android系统的ClassLoader的扩展和理解。Android系统默认使用DexClassLoader来加载...
这款应用的独特之处在于它支持双卡设备,能够分别读取两张SIM卡的IMSI和IMEI信息,并在发送短信时让用户选择使用哪一张卡。 IMSI是手机在移动通信网络中的唯一标识,由运营商分配,用于区分不同的用户。IMEI则是每...
直接下载安装,同时我也上传了源代码分享,详情见个人博客 http://blog.csdn.net/jjzhoujun2010