当前位置:首页 » 安卓系统 » 如何查看安卓编译变量值

如何查看安卓编译变量值

发布时间: 2024-10-28 20:37:13

‘壹’ android编译环境用mmm编译,报错'string' does not name a type

1.androidERROR:unknownvirtualdevicename解决法打开系统属性-->环境变量—>在“系统变量”那一个GroupBox下面选择“新建”-->变量名为"ANDROID_SDK_HOME”(注意,这个变量名不能改变,只能是这个名字!),然后把变量值改为你想把AVD所在的".android”文件夹放置的位置,比如:"F:\AndroidEmulator”,在这里我把它放在AndroidSDK包中,值为:"D:\SDK\Android\android-sdk-windows-1.5_r3”,如下图所示。设定成功的话,在eclipse里preferneces->Android->BulidSetting里为如下结果:Defaultdebugkeystore:F:\Android_Emulator\\.android\debug.keystore然后这样就可以一劳永逸了!!!2.emulator-5554disconnected!Cancelling'oms.Hello.HelloOpone'launch!在eclipse里面改变一下你run的时候的设置就好了.右点你的工程后run里面有一个runconfigrations,在里面有一个选项每次运行都察掉记录wipe.的,选上就好了.

‘贰’ 如何调用android.mk 中的变量

变量
1
LOCAL_PATH := $(call my-dir)
1、解释 LOCAL_PATH:
英文:如下图
中文:Android.mk 开始必须定义变量 LOCAL_PATH,它用来指定源文件的位置
2、解释 my-dir:
英文:如下图
中文:编译系统提供的'my-dir'宏函数,被用来获取当前的目录。

2
include $(CLEAR_VARS)
1、解释 CLEAR_VARS:
英文:如下图
中文:编译系统提供CLEAR_VARS变量,它指向了一个用来清除 LOCAL_ 开头的变量(LOCAL_PATH除外)的makefile文件,需要它的原因是整个的编译上下文中,所有的变量都是全局的,这样就可以保证这些变量只在局部范围内起作用;

3
LOCAL_MODULE := hello-jni
1、解释 LOCAL_MODULE:
英文:如下图
中文:每一个android.mk文件中都必须定义一个模块标示 LOCAL_MODULE , 这个名字必须是唯一的并且不包含任何的空格,编译系统将自动的修改生成文件的前缀和后缀,如一个模块为'foo'共享库将被改为'libfoo.so';
重要提示,如果你的模块名为'libfoo',编译系统生成的文件为 'libfoo.so', 而不会去再增加前缀,当你使用的时候,android平台会自动识别;

4
LOCAL_SRC_FILES := hello-jni.c
1、解释 LOCAL_SRC_FILES
英文:如下图
中文:LOCAL_SRC_FILES必须包含一系列的C/C++源文件,他们将会被建立和装载到模块中,注意你不应该把需要包含的头文件列在这里,因为建立系统将自动计算依赖项,只有源文件才能够被编译器识别;
2、解释 LOCAL_CPP_EXTENSION
英文:如下图
中文:注意默认的c++文件扩展名是'.cpp', LOCAL_CPP_EXTENSION可以用来指定不同类型的扩展名,不要忘了前面的点(如:'.cxx' 将起作用, 但是 'cxx'不会起作用).
如:LOCAL_CPP_EXTENSION := .cc .cpp

5
include $(BUILD_SHARED_LIBRARY)
1、解释 BUILD_SHARED_LIBRARY
英文:如下图
中文:‘建立系统’提供个变量 BUILD_SHARED_LIBRARY, 将根据在‘include’之前定义的所有的信息和LOCAL_前缀的变量,决定将建立什么,如何正确的生成共享库;
2、解释 BUILD_STATIC_LIBRARY
英文: 如下图
中文: 同上,只不过它生成的是静态库

6
LOCAL_C_INCLUDES := $(NDK_ROOT)/sources/third_party/freetype
1、解释 NDK_ROOT
中文:NDK_ROOT 代表的是ndk的根目录,如我的是“D:\Android\android-ndk-r10”,这个例子是用来加载ndk根目录下的freetype的头文件路径;
7
LOCAL_LDFLAGS := \
$(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libfreetype.a
1、解释 LOCAL_LDFLAGS
中文:用来加载用户自己的静态库(.a文件)
2、解释 TARGET_ARCH_ABI
中文:当前的cpu/abi的类型,在链接不同类型的CPU_ABI时非常有用,如下图

8
$(call import-add-path,$(LOCAL_PATH)/libsrc)
1、解释:import-add-path
中文:增加自己的路径到 NDK_MODULE_PATH 环境变量中,再非ndk根目录/sources下编译时会用到
9
LOCAL_SRC_FILES := hello-jni.c HelloJni.cpp
$(error $(LOCAL_SRC_FILES))
1、解释:$
中文:变量前面加上"$"用来返回变量的值
2、解释:$(error string)
中文:用来将string所对应的内容打印到控制台,并且android.mk文件停止继续进行编译,如下图

10
LOCAL_SRC_FILES := hello-jni.c HelloJni.cpp
$(warning $(LOCAL_SRC_FILES))
1、解释:$(warning string)
中文:用来将string所对应的内容打印到控制台,并且android.mk文件将继续进行编译,如下图

11
LOCAL_PRELINK_MODULE := false
1、解释 LOCAL_PRELINK_MODULE:
中文:关闭编译器链接前进行代码优化,防止将没有用到的代码不添加到生成的库中
12
LOCAL_EXPORT_CFLAGS := -DFOO=1
1、解释 LOCAL_EXPORT_CFLAGS
定义这个变量来记录一些列的 c/c++编译标志,他们将会增加到其他的使用这个模块的LOCAL_CFLAGS中,LOCAL_CFLAGS的功能相当于:LOCAL_STATIC_LIBRARIES 和 LOCAL_SHARED_LIBRARIES 这两个变量;

13
LOCAL_STATIC_LIBRARIES := foo
1、解释 LOCAL_STATIC_LIBRARIES
链接进来一个静态库的模块,这里是静态库的模块的名称,而不是静态库的名称
14
LOCAL_SHARED_LIBRARIES
链接进来一个动态库的模块,这里是动态库的模块的名称,而不是静态库的名称

15
LOCAL_EXPORT_CPPFLAGS
跟 LOCAL_EXPORT_CFLAGS 的功能一样,但是它只能够在c++中使用

16
LOCAL_EXPORT_C_INCLUDES
跟 LOCAL_EXPORT_CFLAGS,但是对于c的 include路径,被调用模块申明后,使用模块可以很方便的使用包含的路径

17
LOCAL_EXPORT_LDFLAGS
跟LOCAL_EXPORT_CFLAGS的作用一样,但是仅仅是链接选项
18
LOCAL_EXPORT_LDLIBS
跟LOCAL_EXPORT_CFLAGS的作用类似,但是这个变量说明的系统库,需要带上 '-l' 前缀,他们将导入链接器选项,并追加到你的模块的 LOCAL_LDLIBS
19
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
允许未定义的符号
20
LOCAL_CFLAGS
.c文件对应的编译标记变量
21
LOCAL_LDLIBS
用来链接共享库(so)或者执行文件,使用系统的库文件的时候,需要加上前缀 '-l',例如下面的例子,将告诉连接器生成的模块的时候同时链接 /system/lib/libz.so
LOCAL_LDLIBS := -lz
注意:如果你在一个模块中链接一个静态库,这个静态库是不会起作用的,同时ndk-build 会打印出一条警告消息
22
LOCAL_CFLAGS := -fvisibility=hidden
隐藏库函数名
23
LOCAL_PROGUARD_ENABLED默认是打开的,不特别指定的话,就是起作用的,就可能做优化。
LOCAL_PROGUARD_ENABLED:= disabled

‘叁’ Makefile编译时怎么打印出变量值

其实androidndk上的编译说到底也就是交叉编译,只要配置好交叉编译工具链,使用原有的makefile也是可以编译出在android运行的c、c++程序的。以android-ndk-r4-crystax的ndk版本为例:编译器路径android-ndk-r4-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin名称前缀arm-eabi-头文件目录android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/include库文件目录android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/lib你可以试一下上面的配置,如果编译链接都没有问题,可以adbpush到android设备上运行看看,什么结果?有点崩溃,根本运行不起来,你也许想试试看android自带的ndk例子,确实是能够运行的,问题在哪儿呢?只是正确配置了编译器、头文件、库文件还不够,还需要配置编译、链接的参数,android例子中编译链接的参数是什么呢?你也许想深究一下android的makefile,可是不久你会发现那是更崩溃的事情,里面用了很多的make脚本函数。其实android的makefile是可以把执行的详细命令输出来的,只要make的时候加上V=1即可。可以看到确实带了很多参数编译参数:-fpic-mthumb-interwork-ffunction-sections-funwind-tables-fstack-protector-fno-short-enums-Wno-psabi-march=armv5te-mtune=xscale-msoft-float-mthumb-fomit-frame-pointer-fno-strict-aliasing-finline-limit=64-Wa,--noexecstack-D__ARM_ARCH_5__-D__ARM_ARCH_5T__-D__ARM_ARCH_5E__-D__ARM_ARCH_5TE__-DANDROID链接参数:-nostdlib-Bdynamic-Wl,-dynamic-linker,/system/bin/linker-Wl,--gc-sections-Wl,-z,noreloc-Wl,--no-undefined-Wl,-z,noexecstack-L$(PLATFORM_LIBRARY_DIRECTORYS)crtbegin_static.ocrtend_android.o这其中链接参数中的-Wl,-dynamic-linker,/system/bin/linker、crtbegin_static.o、crtend_android.o是最关键的,android使用了自己的进程加载器,并且自定义了c运行时的启动结束。难怪先前编译的进程启动不了。

热点内容
世界资产配置是什么 发布:2024-10-28 23:23:03 浏览:530
2022款轩逸哪个配置性比价高 发布:2024-10-28 23:21:25 浏览:956
专业java就业培训 发布:2024-10-28 22:59:52 浏览:121
安卓手机声卡转换器哪个好 发布:2024-10-28 22:57:39 浏览:10
公积金怎么查询账号密码 发布:2024-10-28 22:43:33 浏览:156
电视路由器哪里是网络密码 发布:2024-10-28 22:43:32 浏览:827
python爬虫教程pdf 发布:2024-10-28 22:39:15 浏览:893
哪个微信安卓版本好用 发布:2024-10-28 22:22:10 浏览:342
net调用java接口 发布:2024-10-28 22:21:58 浏览:475
c语言输入单个字符 发布:2024-10-28 22:20:58 浏览:429