jni调用.so

octopus666 2011-04-13 01:07:31

/********************test.h
#ifndef _TEST_H_
#define _TEST_H_
#include <stdio.h>
#include <stdlib.h>
#ifdef __cplusplus
extern "C" {
#endif
extern int test_a();
#ifdef __cplusplus
}
#endif
#endif

/*****************test.c

#include "test.h"
int test_a()
{
int a = 9;
return a;
}

以上用交叉编译器了一个libtest.so
交错编译器
arm-none-linux-gnueabi-gcc test.c -shared -o libtest.so

jni目录下:
android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := native-plasma这是NDK自带例子
LOCAL_SRC_FILES := plasma.c 我在里面代码加了int aa = test_a();
LOCAL_LDLIBS += -lm
LOCAL_LDLIBS +=-llog
LOCAL_LDLIBS +=-landroid
LOCAL_LDLIBS += $(LOCAL_PATH)/inllib/libtest.so //这是加载libtest.so 的路径
LOCAL_STATIC_LIBRARIES := android_native_app_glue

include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)

然后用NDK命令$NDK/ndk-build一个native-plasma.so 能编译成功
编译器编译项目 在android仿真器 运行该程序 出错 提示 sorry! The application native-plasma (process com.gcx.plasma) has stopped unexpectedly.please try again
我看到log.so opengles.so进入adb shell 在lib目录下能看到 是不是我的test.so 没在这里面所以运行不成功呢
这lib是只读的 加不了

NDK是r5的 SDK也是最新


...全文
337 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
octopus666 2011-04-15
  • 打赏
  • 举报
回复
问题 解决了 要用设定权限在sdk 目录找到adb 命令:$./adb remount /system/lib rw
然后吧.so ./adb push /目录/libtest.so /system/lib
可能会出现out of memory
这是需要给模拟器分配空间 进入sdk tools目录有个 emulator
命令:./emulator -avd Android2.3.1 -partition-size 256 (Android2.3.1是模拟器名字版本号)
可是这种方法只能测试 不能发布版本
octopus666 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hawaii 的回复:]

你把test.so和native-plasma.so放在一个目录下试试?
[/Quote]
不行试过了
在程序运行要加载 test.so 如果这库能放入system/lib里面 我想应该可以
关键加入不进去 不能写入 设定权限也不行
hawaii 2011-04-13
  • 打赏
  • 举报
回复
你把test.so和native-plasma.so放在一个目录下试试?

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧