安卓支持c++么?

安卓支持c++么?,第1张

当然支持,安卓(android)开发工具集里有个所谓的NDK就是用C/C++编程的,如果用android studio开发用NDK是比较方便的。

安卓(android)从诞生之日起就支持c/c++的编程,android代码本身,底层也全部是c/c++来编写,应用层用java,通过JNI(Java Native Interface)机制来和其它语言互相通信(互相调用),在android里主要是c/c++和java互相调用,很多java调用的库也是用c/c++来写的。

现在的android在应用层(app)也强化了对c/c++代码的支持,并提供了一整套把java代码和c/c++编译成的.so文件打包成apk,便于发布的功能,就是所谓的NDK(Native Development Kit), android studio对NDK功能做了原生的支持之所以android要越来越支持NDK,原因主要包括:

代码的保护。由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大

可以方便地使用现存的开源库。大部分现存的开源库都是用C/C++代码编写的。

提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。比如视频,音频压缩,网络传输等功能

便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。

用c++写安卓手机软件的方法:

安装ndk,使用纯c++开发安卓程序,下边是详细的步骤与说明:

1、编写入口函数

android_main为入口函数,和C++中的main函数是一样的。这里创建CELLAndroidApp的对象,直接调用main函数。

void android_main(struct android_app* state)

{

CELLAndroidApp    app(state)

  app.main(0,0)

}

2.绘制类的实现说明

 protected:

EGLConfig        _config

EGLSurface       _surface

EGLContext       _context

EGLDisplay       _display

android_app*     _app

int              _width

int              _height

部分参数说明:

_surface:用于绘制图形,相当于windows绘图中的位图

_context:可以看做是opengl对象

_display:用于绘图的设备上下文,类似于windows绘图中的dc

3.构造函数说明

CELLAndroidApp(android_app* app):_app(app)      {          _surface    =    0         _context    =    0           _display    =    0         _width        =    64         _height        =    48         app->userData        =    this //用户数据          app->onAppCmd         =     handle_cmd //窗口的创建销毁等          app->onInputEvent     =    handle_input //回调函数      } 

值得注意的是,这里的app中的userData,传入用户数据,这里直接传入this,onAppCmd传入的handle_cmd回调函数,onInputEvent传入的事handle_input回调函数

4.类中函数main()说明

virtual    void     main(int argc,char** argv)

{

int ident

int    events

android_poll_source* source

while (true)

{        

while ((ident = ALooper_pollAll(0, NULL, &events, (void**)&source)) >= 0) 

{

if (source != NULL)

source->process(_app, source) //有触摸事件,调用input函数,相当于dispatchmessage

if (_app->destroyRequested != 0)

return

}

render()

}

}

5.调用render()函数,绘制图形。

6.初始化设备函数initDevice()

virtual void     initDevice()

{

const EGLint attribs[] =

{

EGL_SURFACE_TYPE, EGL_WINDOW_BIT,

EGL_BLUE_SIZE, 8, 

EGL_GREEN_SIZE, 8,

EGL_RED_SIZE, 8,

EGL_NONE

}

EGLint     format

EGLint    numConfigs

_display    =    eglGetDisplay(EGL_DEFAULT_DISPLAY)

eglInitialize(_display, 0, 0)

eglChooseConfig(_display, attribs, &_config, 1, &numConfigs) 

eglGetConfigAttrib(_display, _config, EGL_NATIVE_VISUAL_ID, &format)

ANativeWindow_setBuffersGeometry(_app->window, 0, 0, format) 

_surface    =     eglCreateWindowSurface(_display, _config, _app->window, NULL)

#if 0

EGLint contextAtt[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE, EGL_NONE }

_context     =     eglCreateContext(_display, _config, 0, contextAtt)

#else

_context     =     eglCreateContext(_display, _config, 0, 0) 

#endif

if (eglMakeCurrent(_display, _surface, _surface, _context) == EGL_FALSE)

{

LOGW("Unable to eglMakeCurrent") 

return

}

eglQuerySurface(_display, _surface, EGL_WIDTH, &_width) 

eglQuerySurface(_display, _surface, EGL_HEIGHT, &_height)

onCreate()

// Initialize GL state.

glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST) 

glEnable(GL_CULL_FACE)

glShadeModel(GL_SMOOTH)

glDisable(GL_DEPTH_TEST)

glViewport(0,0,_width,_height)

glOrthof(0,_width,_height,0,-100,100)

7.绘制函数render()

virtual    void     render()

{

if(_display == 0)

{

return

}

glClearColor(0,0,0, 1) 

glClear(GL_COLOR_BUFFER_BIT)

glEnableClientState(GL_VERTEX_ARRAY) 

if(g_arVertex.size() >= 2)

{

glColor4f(1,1,1,1) 

glVertexPointer(3,GL_FLOAT,0,&g_arVertex[0]) 

glDrawArrays(GL_LINE_STRIP,0,g_arVertex.size())

}

eglSwapBuffers(_display,_surface) //双缓存的交换缓冲区

}

8.编译程序,将程序导入到模拟器中,最终运行的效果图如下:

用c语言编的应用程序能在安卓手机上运行吗

C语言编写的程序不能直接在android上运行,androidjni通过类似dll的so方式应用C/C++代码,就是androidnative的开发(NDK)

VB生成的应用程序能在手机上运行吗

不能的。

windows的自动运行跟Mac的自动运行肯定不是一个道理,那张光盘只不过兼顾了两个系统的自动运行方式专门做了设置。而且,这个跟问题没有什么关系。

Windows下VB编译好的程序绝对不可能直接运行在mac os下。

windows 应用程序能在 windows 10 mobile上运行吗

普通桌面应用就是指我们传统的WINDOWS应用程序 应用商店下载的为Metro应用程序,一般可以全屏 *** 作的。 一般办公电脑习惯是用传统的普通桌面应用 平板、手机等是使用应用商店下载的应用程序 可以这样理解的

请问,用C#编的.exe的应用程序能够在所有Windows系统上运行吗?

目标机器上必须安装相应版本的. framework runtime,其实和JAVA虚拟机一样,C#编译的exe最终都被编译成中间语言,需要在相应的运行时框架下才能运行

c语言怎么关闭正在运行的应用程序

可以通过system 函数,调用dos命令taskkill实现关闭正在运行的应用程序。

system("taskkill /im notepad.exe")

会关闭记事本应用。

system("taskkill \F /pid 1234 \T")

会强制结束pid为1234的进程及其子进程。

关于taskkill的详细描述如下:

TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter] [/PID processid | /IM imagename] } [/F] [/T]

参数列表:

/S system 指定要连接到的远程系统。

/U [domain\]user 指定应该在哪个用户上下文

执行这个命令。

/P [password] 为提供的用户上下文指定密码。如果忽略,提示输入。

/F 指定要强行终止的进程。

/FI filter 指定筛选进或筛选出查询的的任务。

/PID process id 指定要终止的进程的PID。

/IM image name 指定要终止的进程的图像名。通配符 '*'可用来指定所有图像名。

/T Tree kill: 终止指定的进程和任何由此启动的子进程。

/? 显示帮助/用法。

筛选器:

筛选器名 有效运算符 有效值

----------- --------------- --------------

STATUS eq, ne 运行 | 没有响应

IMAGENAME eq, ne 图像名

PID eq, ne, gt, lt, ge, le PID 值

SESSION eq, ne, gt, lt, ge, le 会话编号

CPUTIME eq, ne, gt, lt, ge, le CPU 时间,格式为

hh:mm:ss。

hh - 时,

mm - 钟,ss - 秒

MEMUSAGE eq, ne, gt, lt, ge, le 内存使用,单位为 KB

USERNAME eq, ne 用户名,格式为

[domain\]user

MODULES eq, ne DLL 名

SERVICES eq, ne 服务名

WINDOWTITLE eq, ne 窗口标题

注意: 只有带有筛选器的情况下,才能跟 /IM 切换使用通配符 '*'。

注意: 远程进程总是要强行终止,

不管是否指定了 /F 选项。

用java编写的程序能在安卓机上运行么

当然可以,不过如果涉及到线程的时候,得按照安卓对应的版本来进行选择性的移植程序

假如你使用了开发框架的话,那么在安卓上面可能会遇到一些小问题!调试一下应该就可以通过的

我想学编写安卓手机的应用程序,请问我需要学哪些语言?c?java?

安卓是以JAVA语言为基础的啊。当然是看java了!好多安卓程序员原来都是学JAVA的,然后安卓被谷歌开发以后才转过来的!

如何让MFC编写的应用程序能在别的电脑上运行

把应用程序做成Release版的应用程序,具体步骤如下:

菜单Build->SetActiveConfigure,在d出对话框中选择Win32Release,点OK,然后

菜单project->setting ,在d出对话框的General属性页的Microsoft Foundation classes

下拉列表中选择User MFC in static Library,然后rebuildall,把生成的Release目录下

的可执行文件拷贝到另一台机器上即可

静态编译 release编译 用depend.exe看看依赖那些dll文件一并copy过去

在安卓系统上运行应用程序此需打开另一个应用程序这时正在运行的应用程序为什么会意外崩溃?

系统的兼容性 与游戏不太符合 又或许是运行内存太小了 运行内存是512 还是1G或2G 记住是RAM不是ROM哦


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11053134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存