安卓深入理解系统详解(35)
Posted 程序员入门进阶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓深入理解系统详解(35)相关的知识,希望对你有一定的参考价值。
编译 && 运行我们把 android-ndk-r19c 放置到 D:\\android-ndk-r19c 这个位置,然后把 hello-exe 目录放到这里。然后我们 CMD 打开命令行窗口,切换到D:\\android-ndk-r19c\\hello-exe\\jni,使用…\\ndk-build.cmd-B V=1 执行,会看到如下内容:Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-16. [armeabi-v7a] Compile thumb : hello-exe <= hello-exe.c D:/android-ndk-r19c/build//…/toolchains/llvm/prebuilt/windows-x86_64/bin/ clang.exe-MMD-MP-MF D:/android-ndk-r19c/hello-exe/obj/local/armeabi-v7a/objs/hello-exe/hello-exe.o.d-target armv7-none-linux-androideabi16-fdata-sections-ffunction-sections-fstack-protector-strong-funwind-tables-no-canonical-prefixes –sysroot D:/android-ndk-r19c/build//…/toolchains/llvm/prebuilt/windows-x86_64/sysroot-g-Wno-invalid-command-line-argument-Wno-unused-command-line-argument-fno-addrsig-fpic-mfpu=vfpv3-d16-march=armv7-a-mthumb-Oz-DNDEBUG-ID:/android-ndk-r19c/hello-exe/jni -DANDROID-nostdinc+±Wa,–noexecstack-Wformat-Werror=format-security -c D:/android-ndk-r19c/hello-exe/jni/hello-exe.c -o D:/android-ndk-r19c/hello-exe/obj/local/armeabi-v7a/objs/hello-exe/
rmeabi-v7a] Executable : hello-exe D:/android-ndk-r19c/build//…/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe-Wl,–gc-sections-Wl,-rpath-link=D:/android-ndk-r19c/build//…/toolchains/llvm/prebuilt/windows-x86_64/ sysroot/usr/lib/arm-linux-androideabi/16-Wl,-rpath-link=D:/android-ndk-r19c/hello-exe/obj/local/armeabi-v7a D:/android-ndk-r19c/hello-exe/obj/local/armeabi-v7a/objs/hello-exe/hello-exe.o-lgcc-Wl,–exclude-libs,libgcc.a-latomic-Wl,–exclude-libs,libatomic.a-target armv7-none-linux-androideabi16-no-canonical-prefixes-Wl,–build-id-nostdlib+±Wl,–no-undefined-Wl,-z,noexecstack-Wl,-z,relro-Wl,-z,now-Wl,–warn-shared-textrel-Wl,–fatal-warnings-fpic-fPIE-pie -lc-lm-o D:/android-ndk-r19c/hello-exe/obj/local/armeabi-v7a/hello-exe [armeabi-v7a] Install : hello-exe => libs/armeabi-v7a/hello-exe copy /b/y “D:\\android-ndk-r19c\\hello-exe\\obj\\local\\armeabi-v7a\\hello-exe” “D:\\android-ndk-r19c\\hello-exe\\libs\\armeabi-v7a\\hello-exe” > NUL D:/android-ndk-r19c/build//…/toolchains/llvm/prebuilt/windows-x86_64/bin/arm-linux-an droideabi-strip–strip-unneeded D:/android-ndk-r19c/hello-exe/libs/armeabi-v7a/hello-exe这里专门把编译过程打印了出来( V=1 )。跟这个差不多的是–just-print 参数,不过–just-print 是只打印,不编译,那么如果编译过程有一些依赖,就会出现报错。综上,一般我们使用 V=1。如果编译过程需要依赖别的编译出来的结果,就会报错了。所以就用 V=1 来查看编译过程,-B 参数代表强制重新编译。编译出来的在这个目录 D:\\android-ndk-r19c\\hello-exe\\libs\\armeabi-v7a\\hello-exe 我们把它丢到手机中( Root 后扔到 system/bin 目录),也可以是模拟器,我们这里就使用模拟器运行它。输出为:Hello JNI !
文件解析
我们看了上文,操作完了,运行出来了。但是对于每个文件都写的什么,具体含义还不清楚,那么我们这节就来讲下这个。6.1 Android.mk LOCAL_PATH := $(call my-dir)//赋值当前目录include $(CLEAR_VARS)//清理掉无关设置的参数LOCAL_MODULE:= hello-exe //配置模块名,最终名字由它决定LOCAL_SRC_FILES := hello-exe.c //相关的编译文件LOCAL_LDLIBS :=-fpic-fPIE-pie //配置位置无关,链接器参数include $(BUILD_EXECUTABLE) //编译成可执行文件6.2 Application.mk APP_STL := c++_static //引用配置自己需要的c++运行库APP_GNUSTL_FORCE_CPP_FEATURES := exceptions rtti //异常机制支持 支持 run-time type information (rtti) APP_ABI := armeabi-v7a //编译ABI 配置6.3 hello-exe.c #include <string.h> //引用头文件#include <jni.h> #include <stdio.h>
int main() // main 方法 printf(“Hello JNI !\\n”);//打印一段文字6.4 扩展关于 Android.mk ,都有哪些配置,哪些说明 ,android-ndk-r8\\docs\\ANDROID-MK.html 非常详尽的描述了都有哪些值,怎么设置,都有例子和解释。关于 Application.mk ,参考 APPLICATION-MK.html NDK-BUILD.html 这个是编译的说明ndk-build-B V=1 强制重编译,同时显示编译参数ndk-build NDK_DEBUG=1 生成可调试的文件这里抛出个小问题:如何引用一个已经编译好的so/a库呢?提示:PREBUILTS.html 如何预置一个三方库,以及如何使用它。
以上是关于安卓深入理解系统详解(35)的主要内容,如果未能解决你的问题,请参考以下文章
Android安卓书籍推荐《Android驱动开发与移植实战详解》下载