导航:首页 > 操作系统 > 安卓编译器怎么用

安卓编译器怎么用

发布时间:2022-08-12 13:30:36

A. 如何在android中使用汇编语言

由于Android环境非常复杂,框架都是用Java,因此要使用C/C++都需要做很多配置,使用汇编的话需要做更多的工作。
我这边使用的是最新的Android4.0的开发工具,NDK也是最新支持4.0的。这个NDK与老版本的有一些比较明显的不同。
由于我用的是Mac OS X,因此配置起来比瘟抖死上的要容易许多,你不需要再装些杂七杂八的第三方工具,直接可以使用你下载好的NDK。
首先,设置目标路径——在你的Terminal中进入NDK的根目录,随后打NDK_PROJECT_PATH="<你要编译的项目路径>"。回车,再输入export NDK_PROJECT_PATH
回车。
这里要注意的是NDK_PROJECT_PATH=后面的路径需要加引号,否则无效。
由于NDK默认支持的默认编译选项仅支持ARMv5到ARMv5TE架构,因此如果要使用比较高级的特性的话有两种方法:
1、你有办法将TARGET_ARCH_ABI的值变为armeabi-v7a,俺自己试了一下,木有成功。因此可以使用第二种方法,更简单便捷:
2、在你的NDK目录下,找到toolchains,然后找到arm-linux-androideabi-x.y.z目录,在进去可以发现setup.mk文件。找到-march=armv7-a,将上面的神马#ifdef都去掉,下面的#endif也都删了。这样就能确保编译器使用ARMv7A来编译。
完成上述操作之后我们就可以先用最简单的方式来写汇编了,即内联汇编——

static int my_thumb(int mmy)
{
__asm__("movw r0, #1001 \t\n"
"movw r12, #2020 \t\n"
"add r0, r0, r12 \t\n"
"bx lr");

return mmy;
}

jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
my_thumb(0);
return (*env)->NewStringUTF(env, "Hello from JNI !");
}


上述代码其实就是基于NDK自带的hello-jni项目修改的。最后用ndk-build可以成功编译。

上面一段代码是编译器默认的使用Thumb/Thumb-2编译的,因此我里面写的内联汇编的指令都是Thumb代码。
我们下面将讲述一下如何使用ARM代码并使用NEON指令集。
首先,在你的Android.mk中修改LOCAL_SRC_FILES,要将源文件名后面添加.neon后缀,比如LOCAL_SRC_FILES := hello-jni.c改成LOCAL_SRC_FILES := hello-jni.c.neon。
这里要注意的是你真正的源文件名不要修改,就修改LOCAL_SRC_FILES这个符号的值即可。
然后我们再添加新的变量,来指示ARM GCC使用ARM指令集来编译——LOCAL_ARM_MODE := arm
这样就OK了。我们修改一下代码:

static int my_arm(int mmy)
{
__asm__("movw r0, #1001 \t\n"
"movw r12, #2020 \t\n"
"add r0, r0, r12 \t\n"
"vp.32 q0, r0 \t\n"
"bx lr");

return mmy;
}

jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
my_arm(0);
return (*env)->NewStringUTF(env, "Hello from JNI !");
}


使用ndk-build后能正常通过编译。
最后再上个最最高端的。直接写汇编文件。NDK带有GAS工具,因此按常理,完全可以写汇编文件。一般汇编文件的后缀名为.s,因此我们创建一个xxx.s文件即可。
然后我这边创建一个叫hey.s。在Android.mk中将这个文件添加上:LOCAL_SRC_FILES += hey.s.neon
我们这里看到,为了能在汇编文件中使用NEON指令集,我们在这里也把.neon后缀添加上。汇编器的makefile也认这个标识。
我们编辑hey.s文件:

.text
.align 4
.arm
.globl my_real_arm
my_real_arm:
add r0, r0, #256
vmov q0, q1
vp.32 q0, r0
bx lr
这里要注意的是,在Apple的汇编器中,函数名要加前缀下划线,而NDK中提供的汇编器则不需要。
我们修改一下hello-jni.c,把这函数调进去:

extern void my_real_arm(int i);

static int my_arm(int mmy)
{
__asm__("movw r0, #1001 \t\n"
"movw r12, #2020 \t\n"
"add r0, r0, r12 \t\n"
"vp.32 q0, r0 \t\n"
"bx lr");

return mmy;
}
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
my_real_arm(0);
my_arm(0);
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
当然,我们为了确保编译器能够正确地将ARM和Thumb指令集做混合连接,我们可以在刚才的setup.mk中强制在TARGET_CFLAGS标志里加上-mthumb-interwork
在Windows操作系统中试验,终于发现,只要将Application.mk中的APP_ABI中的标志,将armeabi去掉,仅留下armeabi-v7a就能顺利使用neon了。这样不需要修改setup.mk,也不需要将Sample中的那个标志判断去掉,非常方便。
下面列一下可用的Android.mk编译配置文件:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := HelloNeon
LOCAL_SRC_FILES := helloneon.c
LOCAL_ARM_MODE := arm
TARGET_CFLAGS += -mthumb-interwork
TARGET_CFLAGS += -std=gnu11
TARGET_CFLAGS += -O3
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
LOCAL_CFLAGS := -DHAVE_NEON=1
LOCAL_SRC_FILES += neontest.s.neon
LOCAL_ARM_NEON := true
endif
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
$(call import-mole,cpufeatures)
在使用JNI时,只需要在你当前项目工程目录中添加jni文件夹,然后在里面根据Sample中所提供的文件布局来做即可。当你用ndk-build(Windows下要在cygwin控制台中用ndk-build.cmd)来编译时, 如果构建成功,则会在libs文件夹内生成一个libXXX.so。然后用Eclipse ADT重新打开你的项目工程,就会发现jni文件目录以及生成好的so文件都会在你的工程文件目录中展现出来。当然,你后面也能直接在Eclipse IDE下编辑.s汇编文件,这样就更容易阅读了。
最后,在Android汇编器中如果要注释某条语句,那么必须使用C89/90中的注释符——/* ... */
用分号以及后来C++98中所引入的//形式都不管用。
在最新的NDK版本android-ndk-r8d中加入了ARM-Linux GCC4.7以及当前大红大紫的LLVM Clang3.1。不过由于LLVM Clang3.1的很多编译选项与GCC有不少区别,因此在使用Clang3.1的时候需要自己去配置相应的编译选项。这个版本的NDK默认的编译器工具链使用的是GCC4.6版本。如果要使用GCC4.7,那么可以在Application.mk文件中添加NDK_TOOLCHAIN_VERSION=4.7;如果要使用Clang3.1,那么可以在Application.mk中添加NDK_TOOLCHAIN_VERSION=clang3.1。下面给出一个合法的Application.mk的内容:

# Build with LLVM Clang3.1
#NDK_TOOLCHAIN_VERSION=clang3.1

# Build with ARM-Linux GCC4.7
NDK_TOOLCHAIN_VERSION=4.7

# Build only ARMv7-A machine code.
APP_ABI := armeabi-v7a

B. 安卓的我的世界编辑器有什么用怎么用

《Minecraft编辑器
PocketInvEditor》款库存编辑有了工具,给自己更多方块和物品无需编写十六进制数字或连接计算机
【游戏特点】
-
加载和保存口袋版等级.dat文件
-
允许编辑所有物品生存模式编辑类型id伤害和数量!
-
项目id列表构建应用程序,只需单击Browse!
-
键式备份和恢复.zip文件备份保存游戏/com.mojang/minecraftWorlds_backup
/(世界名字)

C. 方舟编译器有什么用,怎么用

什么是方舟编译器?
了解方舟编译器前,我们简单了解下编译器。编译器能够将高级语言转换成机器能懂的机器码,并按照指令运行。可以说是人类和机器沟通的桥梁。方舟编译器是由华为百人专家团队打造推出的高级语言直接编译成机器码的移动端编译器。
方舟编译器怎么用?
1、用户是否只需要在应用市场下载已编译的软件即可?
方舟编译器编译的应用在开发阶段就已经完成。也就是说,只要是经过编译器编译的应用,在应用市场上上架了以后,用户下载的就是编译过的了。
2、方舟编译器能给用户带来什么?
它解决了安卓系统久用必卡顿的魔咒,打破了人机之间的藩篱,让用户能直观感受到的就是:A、提升了应用的流畅度;
B、降低手机
CPU
的开销;
C、进一步降低功耗提升了手机续航能力;
D、为用户带来更加持久流畅的体验。

D. c4droid 安卓上的c++编译器如何使用

先安装主程序,然后在安装三个扩展库。
c4经常遇到的问题及其解决方法:case 1:为什么每一次点run总会提示permission。。。。的啊?
因为你没有root,如果root了还出现说明你是android2.2或者2.3.4,此时换一个刷机包就ok了。
case 2:我安装上了gcc,并且把编译器调成gcc了,但是每次 #include<SDL.h> 都会说“no such file or directory!”
你试试写成“#include <SDL.h>”(include和<>之间加一个空格),这才是标准写法,不这样写默认为terminal 模式。
使用:打开主程序,代码敲好以后,点击Compiled,也就是编译,如果出现Successfully compile 如图那样的则代表编译成功了。如果有错误则会出现error,我们根据提示,自己找到错误的地方。编译好以后,点击run就可以运行了,和电脑一样。
c4droid还支持保存代码,编写好以后可以点击save保存。
c4droid还支持打开代码文件,可以是txt格式也可以是无格式文本。

E. 华为方舟编译器是干什么用的

华为的方舟编译器是属于系统内部底层的一个架构,类似于安卓底层架构来的,是手机运行的重要程序。

F. 安卓模拟器上的APK编辑器怎么用啊

下面应该有设置选项,点开就能和安卓手机一样~有应用程序搜索,电脑里的apk应该都能搜到,如果还不能,那就重下一个吧,因为看不清这款apk模拟器的名字,所以再下载的话,建议下bluestacks,这个模拟器在一般的软件中心应该都有~纯手打啦~望采纳啦~

G. 安卓c语言编辑器怎么用

c4droid是款Android设备上的C/C++程序编译器,默认以tcc(tiny c compiler)为编译器,可以选择安装gcc插件(20mb,只有root用户可以使用),选用gcc后,可以用sdl(简单直控媒体层库,需安装sdl plugin for c4droid)和qt(nokia官方开发库,需安装sdl plugin for c4droid)。也可以开发native android app(需安装sdl plugin for c4droid),就像google ndk一样。软件支持代码高亮,编译时间随cpu主频而定,主频越高编译越快。gcc插件版本4.7.2提供了示列程序,包含sdl,android native,qt和命令行测试程序源码
安装:
先安装主程序,然后在安装三个扩展库。
c4经常遇到的问题及其解决方法:case 1:为什么每一次点run总会提示permission。。。。的啊?
因为你没有root,如果root了还出现说明你是android2.2或者2.3.4,此时换一个刷机包就ok了。
case 2:我安装上了gcc,并且把编译器调成gcc了,但是每次 #include<SDL.h> 都会说“no such file or directory!”
你试试写成“#include <SDL.h>”(include和<>之间加一个空格),这才是标准写法,不这样写默认为terminal 模式。
使用:打开主程序,代码敲好以后,点击Compiled,也就是编译,如果出现Successfully compile 如图那样的则代表编译成功了。如果有错误则会出现error,我们根据提示,自己找到错误的地方。编译好以后,点击run就可以运行了,和电脑一样。
c4droid还支持保存代码,编写好以后可以点击save保存。
c4droid还支持打开代码文件,可以是txt格式也可以是无格式文本。

H. apk编辑器怎么用

1、现在是改名字的教程,找到软件,点击打开。

I. 如何使用android的ndk编译器 编译c++的库

1. 概述 首先回顾一下 Android NDK 开发中,Android.mk 和 Application.mk 各自的职责。 Android.mk,负责配置如下内容: (1) 模块名(LOCAL_MODULE) (2) 需要编译的源文件(LOCAL_SRC_FILES) (3) 依赖的第三方库(LOCAL_STATIC_LIBRARIES,LOCAL_SHARED_LIBRARIES) (4) 编译/链接选项(LOCAL_LDLIBS、LOCAL_CFLAGS) Application.mk,负责配置如下内容: (1) 目标平台的ABI类型(默认值:armeabi)(APP_ABI) (2) Toolchains(默认值:GCC 4.8) (3) C++标准库类型(默认值:system)(APP_STL) (4) release/debug模式(默认值:release) 由此我们可以看到,本文所涉及的编译选项在Android.mk和Application.mk中均有出现,下面我们将一个个详细介绍。 2. APP_ABI ABI全称是:Application binary interface,即:应用程序二进制接口,它定义了一套规则,允许编译好的二进制目标代码在所有兼容该ABI的操作系统和硬件平台中无需改动就能运行。(具体的定义请参考 网络 或者 维基网络 ) 由上述定义可以判断,ABI定义了规则,而具体的实现则是由编译器、CPU、操作系统共同来完成的。不同的CPU芯片(如:ARM、Intel x86、MIPS)支持不同的ABI架构,常见的ABI类型包括:armeabi,armeabi-v7a,x86,x86_64,mips,mips64,arm64-v8a等。 这就是为什么我们编译出来的可以运行于Windows的二进制程序不能运行于Mac OS/Linux/Android平台了,因为CPU芯片和操作系统均不相同,支持的ABI类型也不一样,因此无法识别对方的二进制程序。 而我们所说的“交叉编译”的核心原理也跟这些密切相关,交叉编译,就是使用交叉编译工具,在一个平台上编译生成另一个平台上的二进制可执行程序,为什么可以做到?因为交叉编译工具实现了另一个平台所定义的ABI规则。我们在Windows/Linux平台使用Android NDK交叉编译工具来编译出Android平台的库也是这个道理。 这里给出最新 Android NDK 所支持的ABI类型及区别: 那么,如何指定ABI类型呢?在 Application.mk 文件中添加一行即可: APP_ABI := armeabi-v7a //只编译armeabi-v7a版本 APP_ABI := armeabi armeabi-v7a //同时编译armeabi,armeabi-v7a版本 APP_ABI := all //编译所有版本 3. LOCAL_LDLIBS Android NDK 除了提供了Bionic libc库,还提供了一些其他的库,可以在 Android.mk 文件中通过如下方式添加依赖: LOCAL_LDLIBS := -lfoo 其中,如下几个库在 Android NDK 编译时就默认链接了,不需要额外添加在 LOCAL_LDLIBS 中: (1) Bionic libc库 (2) pthread库(-lpthread) (3) math(-lmath) (4) C++ support library (-lstdc++) 下面我列了一个表,给出了可以添加到“LOCAL_LDLIBS”中的不同版本的Android NDK所支持的库: 下面是我总结的一些常用的CFLAGS编译选项: (1)通用的编译选项 -O2 编译优化选项,一般选择O2,兼顾了优化程度与目标大小 -Wall 打开所有编译过程中的Warning -fPIC 编译位置无关的代码,一般用于编译动态库 -shared 编译动态库 -fopenmp 打开多核并行计算, -Idir 配置头文件搜索路径,如果有多个-I选项,则路径的搜索先后顺序是从左到右的,即在前面的路径会被选搜索 -nostdinc 该选项指示不要标准路径下的搜索头文件,而只搜索-I选项指定的路径和当前路径。 --sysroot=dir 用dir作为头文件和库文件的逻辑根目录,例如,正常情况下,如果编译器在/usr/include搜索头文件,在/usr/lib下搜索库文件,它将用dir/usr/include和dir/usr/lib替代原来的相应路径。 -llibrary 查找名为library的库进行链接 -Ldir 增加-l选项指定的库文件的搜索路径,即编译器会到dir路径下搜索-l指定的库文件。 -nostdlib 该选项指示链接的时候不要使用标准路径下的库文件 (2) ARM平台相关的编译选项 -marm -mthumb 二选一,指定编译thumb指令集还是arm指令集 -march=name 指定特定的ARM架构,常用的包括:-march=armv6, -march=armv7-a -mfpu=name 给出目标平台的浮点运算处理器类型,常用的包括:-mfpu=neon,-mfpu=vfpv3-d16 -mfloat-abi=name 给出目标平台的浮点预算ABI,支持的参数包括:“soft”, “softfp” and “hard”

阅读全文

与安卓编译器怎么用相关的资料

热点内容
怎么把多个word合并成一个pdf 浏览:542
电学基础pdf 浏览:726
cad插件怎么编译 浏览:617
网校源码软件 浏览:667
思科常用配置命令 浏览:377
水容易被压缩吗 浏览:753
java项目试题 浏览:315
为什么安卓拍照没有苹果成相快 浏览:516
安卓版的苹果手机叫什么 浏览:373
手机怎么解压文件夹压缩包 浏览:459
起源任务咋解压 浏览:976
加密式的监督检查 浏览:549
光遇怎么分辨安卓国服和渠道服 浏览:242
ico解压教程 浏览:632
程序员偏右 浏览:17
超算上可以进行vasp编译嘛 浏览:174
北京通app怎么注册登录 浏览:820
iphone上的数据怎么转移到安卓 浏览:743
python求每个时段平均值 浏览:244
安卓手机右上出现Hg什么意思 浏览:69