美文网首页NativeActivity
NativeActivity开发示例-使用AndroidStud

NativeActivity开发示例-使用AndroidStud

作者: DD_Dog | 来源:发表于2019-12-09 18:21 被阅读0次

    Android的主要开发语言都是以Java为主,也有很多开发者使用其他语言,当然也有混合开发的,比如Java&C or Java&C++等。

    现在看来,Android的开发语言相当多,像什么C# for Android,也有Qt for Android 使用Qt图形库,C++进行Android开发(PS:这玩意空包打出来都极其笨重)等等。不过,这无疑为Android的开发者添加了更多的选择,对于开发者来说也是件好事情。

    实际上,Android中使用纯C来开发,其原理也并非纯C,只是将Java层封装好了,使用Jni来调用C | C++的library,不过呢,我们不需要去管那些Java层已经封装好的东西,只需要安心写C | C++代码就行了。

    本文的重点是如何使用AndroidStudio和CMake工具实现一个Demo

    一、基本原理

    前面也说了,使用C进行APK开发,实际上也是调用了Java类,再通过JNI进行回调,那么我们最主要的用户交互界面Activity有很多的用户响应事件,这些事件就是被回调到了C代码中。在Java中Activity的入口是onCreate方法,在C开发中入口函数是android_main,在android_main方法中注册各种事件的监听。

    使用C语言需要自己使用图形库绘制,例如OpenGL,相对而言是比较繁琐的。

    二、AndrodiStudio配置过程

    新建Module后,先配置AndroidManifest.xml文件:
    内容如下:

    <application
        android:hasCode="false"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name="android.app.NativeActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="android.app.lib_name"
                android:value="native-activity" />
        </activity>
    </application>
    

    其中有几项是需要配置的:

    • android:hasCode="false" 表示该应用不包含Java代码
    • android.app.NativeActivity 这个NativeActivity就是用Java封装的用来加载so库用的,固定写法
    • android:name="android.app.lib_name"指定要加载的so为的名称

    接下来添加源文件main.c,放在main/cpp目录下,并在该目录下新建CMakeLists.txt,同时拷贝android_native_app_glue.h到该目录,详情如下:

    • 新建cpp目录,拷贝源文件main.c到该目录,或者自己写,结尾有源码
    • 新建文件,命令为CMakeLists.txt,内容如下:
    project(Native-Activity)
    
    cmake_minimum_required(VERSION 3.4.1)
    #引入native_app_glue头文件
    include_directories(D:/Android/Sdk/ndk-bundle/sources/android/native_app_glue)
    
    add_library(native-activity SHARED main.c)
    
    find_library(log-lib log)
    find_library(OPENGLES3_LIBRARY GLESv3 "OpenGL ES v3.0 library")
    find_library(EGL_LIBRARY EGL "EGL 1.4 library")
    find_library(android-lib android)
    
    #编译为静态库
    add_library(app_glue STATIC
            D:/Android/Sdk/ndk-bundle/sources/android/native_app_glue/android_native_app_glue.c)
    
    target_link_libraries(native-activity
            app_glue #链接静态库native_app_glue
            ${log-lib} #链接log库
            ${android-lib} #链接android库
            ${OPENGLES3_LIBRARY} #链接OpenGLES库
            ${EGL_LIBRARY} #链接EGL库
            )
    
    • 拷贝android_native_app_glue.h,该文件位于你的ndk下面的sources/android/native_app_glue/目录

    好了,这样就可以运行了。快试试吧!

    附上源码

    相关文章

      网友评论

        本文标题:NativeActivity开发示例-使用AndroidStud

        本文链接:https://www.haomeiwen.com/subject/tokigctx.html