Andriod源码开发,打包so到apk(2)
来源:未知 责任编辑:责任编辑 发表时间:2013-12-22 14:54 点击:次
JNIEXPORT jint JNICALL Java _test_jni_jnitest_appadd
(JNIEnv *env, jobject obj, jint x, jint y){
return x +y;
}
d) 把工程文件放到SDK platform\packages\apps目录下,然后进入该目录,命令里输入mm,进行该工程的编译.(之前要再platform之前把工程目标设定好)
e) 编译出来的apk 在platform/out/target/product/sk886x/system/app里可以找到,其中sk886x 是目标平台 . 打开该apk文件,可以看到libapptest.so存在在包里的libs/armeabi文件夹里. 运行 该apk,可以正常运行,显示正确答案.
2. 本地库so文件里加打印消息.
a) 这样修改jni文件夹下Android.mk.添加
LOCAL_SHARED_LIBRARIES := libutils
b) Callapp.c如下
#include <jni.h>
#define LOG_TAG "TestThunderLib"
#undef LOG
#include <utils/Log.h>
JNIEXPORT jint JNICALL Java_test_jni_jnitest_appadd
(JNIEnv *env, jobject obj, jint x, jint y){
LOGD("TEST %d+%d=%d",x,y,x+y);
return x+y;//add22(x,y);
}
c) 重新再工程根目录输入mm,编译得到apk,运行到目标机,通过uart 敲入命令 logcat,会发现有 log 输出 TEST 55 + 66 = 121 等正确信息
3. 在以上的基础上,我引进另外的库文件,给callapp.c调用.
a) 此库我们用NDK 编译出来,请保证和目标平台版本一致.文件如下:
i. Add.c
#include "add.h"
int add22(int x, int y){
return x + y;
}
ii. Add.h
#ifndef ADD_H
#define ADD_H
extern int add22(int x, int y);
#endif /* ADD_H */
iii. NDK 的Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := testapi
LOCAL_SRC_FILES := add.c
LOCAL_PRELINK_MODULE := false
include $(BUILD_STATIC_LIBRARY)
#include $(BUILD_SHARED_LIBRARY)
b) 选择不同的built方式,经NDK 编译,可以得到libtestapi.a,libtestapi.so
c) 此时,工程目录下jni文件夹里Android.mk里添加
LOCAL_STATIC_LIBRARIES := libtestapi
表示吧libtestapi作为静态库编译到libapptest.so里.
d) Callapp.c 内容如下
#include <jni.h>
#include "add.h"
#define LOG_TAG "TestThunderLib"
#undef LOG
#include <utils/Log.h>
JNIEXPORT jint JNICALL Java_test_jni_jnitest_appadd
(JNIEnv *env, jobject obj, jint x, jint y){
LOGD("TEST %d+%d=%d",x,y,x+y);
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>