use prebuild static lib on another android project
来源:互联网 发布:linux redhat中文乱码 编辑:程序博客网 时间:2024/05/22 04:45
前言
在NDK EXE工程中, 使用另外一个android静态库工程编译出来的静态库.a.
在android-ndk-r10e\samples中找了下,并没有这种用法。
上网找了下,有人做过了. 主要是EXE工程的.mk写法不同.
试验记录
静态库工程
// hw\lib\StaticLib1\jni\StaticLib1.cpp#include <jni.h>extern "C" int fn_test_add(int x, int y) { return (x + y);}
# hw\lib\StaticLib1\jni\Android.mkLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := StaticLib1LOCAL_SRC_FILES := StaticLib1.cppinclude $(BUILD_STATIC_LIBRARY)
# hw\lib\StaticLib1\jni\Application.mk# release for armAPP_ABI := armeabi-v7a# HM1SC is 4.4.4 android-19APP_PLATFORM := android-19
在 hw\lib\StaticLib1\jni\ 中运行ndk-build
编译出来的静态库在 hw\lib\StaticLib1\obj\local\armeabi-v7a\libStaticLib1.a
将 libStaticLib1.a 拷贝到 forRelease备用, 其它工程要用libStaticLib1.a时,就从forRelease目录直接拷贝,不用再编译了.
EXE工程
// hw\exe\MainTest\jni\MainTest.cpp#include <jni.h>#include <stdlib.h>#include <stdio.h>extern "C" int fn_test_add(int x, int y);extern "C" int main(int argc, char** argv) { int x = 1; int y = 2; int sum = fn_test_add(1, 2); printf("%d = fn_test_add(%d,%d)\r\n", sum, x, y); return 0;}
# hw\exe\MainTest\jni\Android.mkLOCAL_PATH := $(call my-dir)# prepare libXinclude $(CLEAR_VARS)LOCAL_MODULE := libStaticLib1LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libStaticLib1.ainclude $(PREBUILT_STATIC_LIBRARY)# main proginclude $(CLEAR_VARS)LOCAL_STATIC_LIBRARIES := libStaticLib1LOCAL_MODULE := MainTestLOCAL_SRC_FILES := MainTest.cppinclude $(BUILD_EXECUTABLE)
# hw\exe\MainTest\jni\Application.mk# release for armAPP_ABI := armeabi-v7a# HM1SC is 4.4.4 android-19APP_PLATFORM := android-19
先编译一下EXE工程,看看静态库要放哪个位置才合适
在 hw\exe\MainTest\jni 运行 ndk-build
D:\ls\hw\exe\MainTest\jni>ndk-buildAndroid NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 8 in D:/ls/hw/exe/MainTest/AndroidManifest.xmlAndroid NDK: ERROR:D:/ls/hw/exe/MainTest/jni/Android.mk:StaticLib1: LOCAL_SRC_FILES points to a missing fileAndroid NDK: Check that D:/ls/hw/exe/MainTest/jni/armeabi-v7a/libStaticLib1.a exists or that its path is correctD:/android-ndk-r10e/build/core/prebuilt-library.mk:45: *** Android NDK: Aborting . Stop.
将开始备份(或者别人给的, 没有源码)的libStaticLib1.a拷贝出来, 根据报错提示, 将libStaticLib1.a放到/jni/armeabi-v7a下,再次运行ndk-build
D:\ls\hw\exe\MainTest\jni>ndk-buildAndroid NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 8 in D:/ls//hw/exe/MainTest/AndroidManifest.xml[armeabi-v7a] Compile++ thumb: MainTest <= MainTest.cpp[armeabi-v7a] Executable : MainTest[armeabi-v7a] Install : MainTest => libs/armeabi-v7a/MainTest
测试
编译成功了, 将编译出的MainTest用adb放到真机上跑一下,看看正常不?
d:\tmp>adb devicesList of devices attachede73c0da deviced:\tmp>adb -s e73c0da push test.txt /data/local/tmp0 KB/s (12 bytes in 0.015s)d:\tmp>adb -s e73c0da shellshell@armani:/ $ cd /data/local/tmpshell@armani:/data/local/tmp $ lsMainTesttext.txtshell@armani:/data/local/tmp $ chmod 700 ./MainTestshell@armani:/data/local/tmp $ ls -l-rwx------ shell shell 9432 2016-05-30 21:48 MainTest-rw-rw-rw- shell shell 12 2016-05-21 16:08 test.txtshell@armani:/data/local/tmp $ ./MainTest3 = fn_test_add(1,2)shell@armani:/data/local/tmp $
根据执行EXE的测试结果,可以看出EXE调用.a成功.
0 0
- use prebuild static lib on another android project
- android prebuild
- Android项目使用外部.so - prebuild library on android
- iOS static lib categry Use
- android添加lib project
- android makefile prebuild
- android makefile prebuild
- android makefile prebuild
- Android.mk prebuild
- use lib function on linux with C
- How one VBA project can use an object declared in the class module of another project
- Invalid project description overlaps the location of another project [android]
- How to use HttpWebRequest to post data to another page which is on another server
- use makefile on android-linux
- Please use Android Tools > Fix Project Properties
- Please use Android Tools > Fix Project Properties
- Please use Android Tools > Fix Project Properties.
- Please use Android Tools > Fix Project Properties
- 一个ForkJoin并行任务的实际应用
- 5.30 convexhull.cpp 学习
- 获取spring容器要小心的坑
- 第8章:线性时间排序
- iOS 多线程篇10—NSOperation基本操作
- use prebuild static lib on another android project
- 修改eclipse中的svn用户名和密码
- 深入理解JVM—JVM内存模型
- Install ArchlinuxARM and Setup
- vSphere 查看FC HBA的WWNN和WWPN
- QT学习笔记
- 第9章:中位数和顺序统计量
- Quartz2教程(一)——quatz的介绍与基本概念
- JavaScript学习笔记07 BOM