c与Android
‘壹’ 如何在 Android 系统中用 C 语言编写程序并执行
可以的,只要编译器支持,c语言程序不像java,最终都会被编译器编译成机器代码的,所以关键是编译器能不能编译成相关CPU和操作系统支持的代码。dos是的批处理是不支持的。编写手机软件目前主要还是用C和JAVA,C用得最多
‘贰’ 嵌入式C语言开发和Android哪一个更有发展前景
C语言和JAVA属于开发语言,Android属于应用平台,是不同的概念。从长远看我个人认为学好C语言是很有必要和重要的。因为3G Android应用平台中,很多底层接口和驱动程序都是c语言开发的。
‘叁’ 手机的Android系统能在手机上用C/C++编程吗
可以,有个手机编程软件叫做C4droid,专门用来编译C/C++文件的,要下载支持库,不大的,你可以看看
‘肆’ linux c 和android 选哪个啊。
android只不过是个平台,你可以通过这个平台来开发相关的应用。(说白了就是java开发)
linux只是一个操作系统。具体你要用这个操作系统干什么?就像你用windows可以打游戏,听音乐,看电影,写程序一样。linux可以用来做服务器,用来写程序,也可以搞arm嵌入式开发。
android开发使用java..相比跟嵌入式开发来说比较简单。有真才实学,你完全可以忽略掉什么目前行业来谈这个问题。有真本事走到哪都能吃的开。如果你觉得自己能下得了这个恒心的话。我建议先学会使用linux操作系统然后搞嵌入式开发。还有一个重要前提。。英语要好。。如果你英语非常棒的话,就当我没说。因为以后相关技术文档,还是要看英文的。
‘伍’ 我将来想从事C开发,但是现在又想学android开发,是否矛盾呀
有点小矛盾,android是以java为基础的,而c又是所有语言的基础(个人想法),是结构化编程语言或者面向过程的语言。
android或者java是面向对象的语言。这两者虽然有些许相同却大体上是不同的,建议你还是一直学android吧,前景很广
‘陆’ 在android中如何编译连接 c 的可执行文件
1. 在./development目录下创建一目录 如:myhello
2. 进入hello目录,在其下编写自己的.c文件,如: myhello.c
#include <stdio.h>
int main()
{
printf("hello world\n");
exit(0);
//return 0;
}
3. 在hello目录中,编写Android.mk, 内容如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myhelloworld
LOCAL_SRC_FILES := myhello.c
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)
4. 回到Android源代码顶层目录,进行编译,make myhelloworld
5. 生成的可执行文件位于:out/target/proct/lotus/system/bin/ 目录下
6. adb push 到手机 /data 目录下,然后进入adb shell,到data目录下,执行./myhelloworld 皆可
手动编译连接【arm-eabi-gcc 的目录随andorid的版本而有变化,还有就是需要链接的文件如果比较多时,需要很多-l 就很麻烦了】
7、编译成目标文件:
#$(yourAndroid)/prebuilt/linux-x86/toolchain/[arm-eabi-4.2.1]/bin/arm-eabi-gcc -I bionic/libc/arch-arm/include/ -I bionic/libc/include -I bionic/libc/kernel/common -I bionic/libc/kernel/arch-arm -g -c helloworld.c -o hello.o
8、生成可执行代码:
#$(yourAndroid)/prebuilt/linux-x86/toolchain/[arm-eabi-4.2.1]/bin/arm-eabi-gcc -nostdlib -Bdynamic -Wl,-T,build/core/armelf.x -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections -Wl,-z,noreloc -o helloworld -Lout/target/proct/[generic]/obj/lib -Wl,-rpath-link=out/target/proct/[generic]/obj/lib -lc hello.o -entry=main
其中[ ]中部分根据实际情况修改
**************************************************
实验:
1. 建目录(my Android)/development/test, 在该目录下新建 Android.mk和fb_test.c文件
2. Android.mk文件
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := myfbtest
LOCAL_SRC_FILES := fb_test.c
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)
3. 以下为fb_test.c
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <linux/kd.h>
#include <stdio.h>
#define FBBIT_PER_PIXEL 32
#define FBBIT_PIXEL_IMAGE 16
#define PIXELS_WIDTH_BYTE 4
#define BYTE_PER_PIXEL 3
#define FB_GRAPHICS_PATH "/dev/graphics/fb0"
#define DEV_TTY0_PATH "/dev/tty0"
#define DISPLAY_ERROR -1
#define DISPLAY_SUCCESS 0
#define GET_BATTERYCAPACITY_ERR -1
#define MAX_STR 255
static struct {
int fd;
void *pixels;
struct fb_fix_screeninfo fixed;
struct fb_var_screeninfo var;
int align_xres;
} fb;
int getBatteryCapacity(void)
{
FILE *in;
char tmpStr[MAX_STR + 1];
char capfile[] = "/sys/class/power_supply/battery/capacity";
if (capfile == NULL)
return GET_BATTERYCAPACITY_ERR;
in = fopen(capfile, "rt");
if (in == NULL)
return GET_BATTERYCAPACITY_ERR;
if (fgets(tmpStr, MAX_STR, in) == NULL) {
printf("Failed to read battery capacity!\n");
fclose(in);
return GET_BATTERYCAPACITY_ERR;
}
printf("Battery capacity(ascii): %s\n", tmpStr);
fclose(in);
return 0;//atoi(tmpStr);
}
static int vt_set_graphicsmode(int graphics)
{
int fd, r;
fd = open(DEV_TTY0_PATH, O_RDWR | O_SYNC);
if (fd < 0)
return DISPLAY_ERROR;
r = ioctl(fd, KDSETMODE, graphics);
close(fd);
return r;
}
int display_init(void)
{
fb.fd = open(FB_GRAPHICS_PATH, O_RDWR);
if (fb.fd < 0)
return DISPLAY_ERROR;
if (ioctl(fb.fd, FBIOGET_FSCREENINFO, &fb.fixed) < 0)
return DISPLAY_ERROR;
if (ioctl(fb.fd, FBIOGET_VSCREENINFO, &fb.var) < 0)
return DISPLAY_ERROR;
fb.align_xres = fb.fixed.line_length /
(fb.var.bits_per_pixel >> BYTE_PER_PIXEL);
fb.pixels = mmap(0, fb.fixed.line_length * fb.var.yres_virtual,
PROT_READ | PROT_WRITE, MAP_SHARED, fb.fd, 0);
if (fb.pixels == MAP_FAILED)
return DISPLAY_ERROR;
vt_set_graphicsmode(KD_GRAPHICS);
memset(fb.pixels, 0, fb.fixed.line_length * fb.var.yres_virtual);
//display_update(fb.pixels, fb.align_xres, fb.var.yres);
fb.var.activate = FB_ACTIVATE_FORCE;
ioctl(fb.fd, FBIOPUT_VSCREENINFO, &fb.var);
printf("display_init ok\n");
return DISPLAY_SUCCESS;
}
void display_on(void)
{
ioctl(fb.fd, FBIOBLANK, FB_BLANK_UNBLANK);
}
void display_off(void)
{
ioctl(fb.fd, FBIOBLANK, FB_BLANK_POWERDOWN);
}
int main()
{
display_init();
display_off();//关显示屏
getBatteryCapacity();
sleep(5);
display_on();//开显示屏
return 0;
}
‘柒’ C语言与安卓开发有什么关系。
安卓的底层使用的是C语言开发的
所以会使用到C语言
另外安卓在嵌入式控制系统中
使用软件控制嵌入式系统的时候会使用到NDK技术
这里面也会使用到C语言开发
‘捌’ Android可以用啥编程语言 可以用C语言在Android上编程吗 有什么用C语言编Andr
安卓开发,都是用java语言的。上层都是用java实现的。
用c语言的话,是开发底层,也是NDK,可以搜一下。
用c语言可以开发像网络地图的so文件,直接跟手机硬件交互的。还有一些用到与硬件直接交互的都是需要c语言的。
如果只是开发一个应用的话,java加AndroidSdk就可以了,不用c语言
‘玖’ C语言可以做安卓开发吗
Android底层是Linux操作系统,上层有个虚拟机,apk都是使用Java语言编写的,就看你做什么开发了,如果你想从事底层开发,比如驱动开发、内核开发,是使用C语言。
如果你想从事Android APP开发,使用Java语言。
如果你从事中间层、framework开发,使用Java、C++语言。