典型应用之——将库打进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
分享到:
相关推荐
安卓Android源码——更换软件主题(apk方式).rar
Android源码——实现皮肤打包成apk的demo.zip
安卓Android源码——实现皮肤打包成apk的demo.zip
安卓Android源码——更换软件主题(apk方式).zip
Android应用程序,安装在手机后,轻松获取imsi号码,方便开发和测试人员使用。
Linux下用NDK和SDK工具将库文件打包进apk应用.pdfLinux下用NDK和SDK工具将库文件打包进apk应用.pdf
1.游戏插件——必须安装.apk
下载到安卓手机安装后打开,可以查看当前应用签名
IOS应用源码——widgetpress-BigRaceClient-6931310.rar
这是一个android中的多点缩放例程,代码中实现的是文本的缩放。代码中有比较详细的注释,容易理解。
将我们需要的APK预置进系统: 以预置WeChat的APK为例 (1)在packages/apps下面创建和APK名字一样的目录(2)将WeChat.apk放到packages/apps/WeChat下面(3)在packages/apps/WeChat里创建Android.mk文件: LOCAL_...
直接下载安装,同时我也上传了源代码分享,详情见个人博客 http://blog.csdn.net/jjzhoujun2010
控制CPU状态,可打开所有CPU,可使用于blktrace收集物理机上的数据请求
安卓Android源码——完美版的拼图游戏APK和工程源码.zip
apk生成、apk签名、Zipalign优化APK
安卓Android源码——从安卓手机ROM包提取APK工具.zip
APK瘦身优化检测工具-Matrix ApkChecker 使用(csdn)————程序
Android内核是Linux的,而linux的动态库是*.so文件,那么在windows要如何生成并打包到APK中呢?实现这一过程,大致需要以下几个步骤: 1、搭建编译环境 2、使用JNI生成相应的头文件 3、编写动态库的实现 4、生成动态...