`
iaiai
  • 浏览: 2143962 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android NDK纯C++开发

 
阅读更多
继续了解使用native_app_glue来编写纯C++的Android NDK开发。
下面从一个"最简单“的可运行的程序来了解native_app_glue程序的基本组成。
1. 源码main.cpp:
// main.cpp  
#include <android_native_app_glue.h>  
  
  
/** 
 * This is the main entry point of a native application that is using 
 * android_native_app_glue.  It runs in its own thread, with its own 
 * event loop for receiving input events and doing other things. 
 */  
void android_main(struct android_app* state) {  
// Make sure glue isn't stripped.  
app_dummy();  
}

首先,需要包含头文件android_native_app_glue.h,然后,必须实现一个android_main()函数,否则是无法运行的(编译可能没有问题)。另外,在android_main里面必须至少调用app_dummy(),这个函数的作用是为了保证glue没有被优化掉,参考android_native_app_glue.h中的说明:
/** 
 * Dummy function you can call to ensure glue code isn't stripped. 
 */  
void app_dummy();

2. Android.mk
# Android.mk  
LOCAL_PATH := $(call my-dir)  
  
include $(CLEAR_VARS)  
  
LOCAL_MODULE    := test  
LOCAL_SRC_FILES := main.cpp  
LOCAL_LDLIBS    := -landroid  
LOCAL_STATIC_LIBRARIES := android_native_app_glue  
  
include $(BUILD_SHARED_LIBRARY)  
  
$(call import-module,android/native_app_glue)

这里可见和一般的NDK程序的Android.mk的区别在于:
(1) 需要增加LOCAL_LDLIBS=-landroid
(2) 增加LOCAL_STATIC_LIBRARIES=android_native_app_glue
(3) 增加$(call import-module,android/native_app_glue)
这就是和一般的NDK程序的makefile的区别,另外,这里的LOCAL_MODULE=test,下面会用到。
3. AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>  
<!-- BEGIN_INCLUDE(manifest) -->  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
        package="com.example.native_activity"  
        android:versionCode="1"  
        android:versionName="1.0">  
  
    <!-- This is the platform API where NativeActivity was introduced. -->  
    <uses-sdk android:minSdkVersion="14" />  
  
    <!-- This .apk has no Java code itself, so set hasCode to false. -->  
    <application android:label="@string/app_name" android:hasCode="false">  
  
        <!-- Our activity is the built-in NativeActivity framework class.  
             This will take care of integrating with our NDK code. -->  
        <activity android:name="android.app.NativeActivity"  
                android:label="@string/app_name"  
                android:configChanges="orientation|keyboardHidden">  
            <!-- Tell NativeActivity the name of or .so -->  
            <meta-data android:name="android.app.lib_name"  
                    android:value="test" />  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  
    </application>  
  
</manifest>   
<!-- END_INCLUDE(manifest) -->

基本上和一般的AndroidManifest文件也差不多,需要注意的是:
(1) Activity的名称必须为NativeActivity
一般的程序Activity就是自己新建的Activity的名称,这里必须为NativeActivity
<activity android:name="android.app.NativeActivity"  
                android:label="@string/app_name"  
                android:configChanges="orientation|keyboardHidden">

(2) 增加对JNI中库的引用
<!-- Tell NativeActivity the name of or .so -->  
           <meta-data android:name="android.app.lib_name"  
                   android:value="test" />

一般的程序不需要这一部分,但是对于纯C++开发,需要指定其meta data,这里的test就是上面的Android.mk中的module的名称,要保持一致。

总结:上面的程序是一个”最简单“的纯C++的Android应用的例子,编译之后就可以运行了,如果上面的某一个地方错误,就会导致无法编译或运行。其中重点要理解的是android_main和android_dummy函数,另外,上面的程序尽管可以编译运行,但是并不具有实际意义,因为它不能响应任何事件,会导致无法响应。下面讨论更一般的情况,了解一般的程序的组成。

重点理解:
android_main和android_dummy的作用
纯C++程序的基本组成

android职业交流QQ 群,有兴趣的可以一起来多搞搞技术、职业交流,互相学习、提高,互通好的职业信息,群号:104286694
分享到:
评论

相关推荐

    android ndk开发实例代码

    android ndk 开发入门小例子。 博客地址http://blog.csdn.net/u014702653/article/details/51861013

    Android NDK C/C++ 简单样例

    Android NDK调用C/C++ 简单样例,适合初次搭建ndk平台的人参考

    Android C++高级编程:使用NDK(高清完整带书签)电子书

    《移动开发经典丛书·Android C++高级编程:使用NDK》中我们将学习如何用AndroidNDK通过原生代码语言去实现自己的Android应用中对性能要求较高的部分。  《移动开发经典丛书·Android C++高级编程:使用NDK》介绍了...

    Android NDK Game Development Cookbook (安卓NDK游戏开发指南)

    Android NDK Game Development Cookbook A systematic guide consisting of over 70 recipes which focus on helping you build portable mobile games and aims to enhance your game development skills with ...

    非常强大的eclipse中android ndk开发环境的配置说明

    详细介绍了在eclipse中android项目下c/c++代码的自动编译,和在eclipse中用ant生成ndk需要的jni头文件,加速ndk的开发,因为是原创,费了不少心力和时间,所以设了6分,有人反映太贵了,现在调成3分,这下大家满意了...

    Android C++高级编程 使用NDK

    Android C++高级编程 使用NDK,Android C++高级编程 使用NDK

    Android C++高级编程——使用NDK

    不管你是想将已经存在的原生代码应用移植到Android平台上还是准备开始在Android平台上进行软件开发,使用《Android C++高级编程——使用NDK》一书提供的技术可以构建更出色的应用。本书将展示构建性能更好的复杂原生...

    Ndk-Jni开发实战

    Ndk-Jni demo

    《Android C++高级编程——使用NDK》_源码.zip

    《Android C++高级编程——使用NDK》提供了... 《Android C++高级编程——使用NDK》提供了移植、开发以及利用Android平台上的C++和其他原生代码所需要的知识和技能,以便于运行图形化的高级应用和更复杂的原生应用。

    Android C++高级编程: 使用NDK

    《移动开发经典丛书·Android C++高级编程:使用NDK》中我们将学习如何用AndroidNDK通过原生代码语言去实现自己的Android应用中对性能要求较高的部分。  《移动开发经典丛书·Android C++高级编程:使用NDK》介绍了...

    Android NDK环境配置

    NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk,并集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件

    Android NDK 获取系统版本号

    博客名称 : 【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 ) 博客地址 : https://hanshuliang.blog.csdn.net/article/details/102933704

    细说Android4.0NDK编程.pdf

    本书顺应Android软/硬件、云计算整合潮流,详细剖析了NDK开发中涉及的各类问题和解决方案:搭建Android NDK开发环境的每一步细节,开发第一个Android NDK程序,Android NDK中Java与C/C++代码的互相调用,Facade设计...

    Android开发eclipse NDK插件

    android开发有时需要开发c/c++插件,这就需要用到NDK(Native Development Kit),如果eclipse中没有配置NDK的选项则需要此插件。解压后对应放入eclipse目录下的features和plugins文件夹重启eclipse就可以看到NDK的...

    Android C_C++高级编程_NDK开发必备

    Android C_C++高级编程_NDK开发必备,为ndk开发提供不错的教材,给大家学习,交流,经典之作

    Android C++ 高级编程 使用ndk

    android c++高级编程详细讲述使用ndk开发android应用的各个细节,是一本学习android高级开发技术的大师级作品。

    Android ndk 开发环境搭建 文档

    Android系统中的应用程序都是用Java开发的。Android NDK使我们能够在android上使用C/C++开发的原生代码。 有两个理由使用NDK: 一是合理的重用现有的代码;二是在程序中某些关键的部分提高执行效率。

    详解如何使用Android Studio 进行NDK开发和调试

    个人认为使用Android Studio作NDK开发是必然趋势,所以本文将简单介绍如何在Android Studio上实现NDK开发。 简介 JNI JNI 是Java Native Inteface的缩写,是Java中定义的一种用于连接Java和C/C++接口的一种实现方式...

    详解AndroidStudio3.0开发调试安卓NDK的C++代码

    本文介绍了AndroidStudio3.0开发调试安卓NDK的C++代码,分享给大家,具有如下: 一、新建项目 新建项目,没有发现Include C++ Support 选项。因为印象中是有过该选项的,找了半天没找到。 后来无意间拖了下窗口大小...

    Android C++ 高级编程-使用NDK

    本书提供了android NDK开发的全面信息,介绍了从NDK开发环境搭建的每一步细节,NDK的基本概念和体系结构,具体...同时还比较详尽地介绍了Android NDK对C、C++标准库的支持。是一本关于Android NDK开发的全新入门指南。

Global site tag (gtag.js) - Google Analytics