• Android NDK开发初步


    在配置好NDK开发之后就能够使用C/C++开发android了。以下以一个HelloWorld项目来说明
    1.新建一个Androidproject
    新建一个HelloWorldproject
    代码例如以下

    1. package com.zhycheng;  
    2. import android.app.Activity;  
    3. import android.os.Bundle;  
    4. import android.widget.TextView;  
    5.   
    6. public class HelloWorldActivity extends Activity {  
    7.     /** Called when the activity is first created. */  
    8.     @Override  
    9.     public void onCreate(Bundle savedInstanceState) {  
    10.         super.onCreate(savedInstanceState);  
    11.         TextView tv=new TextView(this);  
    12.         tv.setText(srringFromCpp());  
    13.   setContentView(tv); }  
    14. public native String srringFromCpp();  
    15. static { System.loadLibrary("HelloWorld"); }}  



    System.loadLibrary("HelloWorld");中的HelloWorld是动态链接库libHelloWorld.so
    2 生成头文件和源文件
    先在project文件夹下新建一个文件夹叫做jni
    如今我要使用javah这个工具生成头文件
    在project的文件夹下运行命令
    zhycheng@zhycheng-Lenovo-B460:~/androidworkspace/HelloWorld$ javah -classpath bin/classes -d jni com.zhycheng.HelloWorldActivity
    这时在jni目录下就生成了com_zhycheng_HelloWorldActivity.h头文件。内容例如以下
    1. /* DO NOT EDIT THIS FILE - it is machine generated */  
    2. #include <jni.h>  
    3. /* Header for class com_zhycheng_HelloWorldActivity */  
    4.   
    5. #ifndef _Included_com_zhycheng_HelloWorldActivity  
    6. #define _Included_com_zhycheng_HelloWorldActivity  
    7. #ifdef __cplusplus  
    8. extern "C" {  
    9. #endif  
    10. /* 
    11.  * Class:     com_zhycheng_HelloWorldActivity 
    12.  * Method:    srringFromCpp 
    13.  * Signature: ()Ljava/lang/String; 
    14.  */  
    15. JNIEXPORT jstring JNICALL Java_com_zhycheng_HelloWorldActivity_srringFromCpp  
    16.   (JNIEnv *, jobject);  
    17.   
    18. #ifdef __cplusplus  
    19. }  
    20. #endif  
    21. #endif  
    22. 在这个文件中,我们能够得到srringFromCpp的函数名。  
    23. 以下我在jni目录里新建一个HelloWord.c文件内容例如以下  
    24. #include <string.h>  
    25. #include <jni.h>  
    26. JNIEXPORT jstring JNICALL Java_com_zhycheng_HelloWorldActivity_srringFromCpp  
    27.   (JNIEnv *env, jobject obj)  
    28. {  
    29.  return (*env)->NewStringUTF(env,"张译成");  
    30. }  



    这里还要在jni文件夹里新建一个Android.mk文件。内容例如以下
    1. LOCAL_PATH:= $(call my-dir)  
    2.   
    3. include $(CLEAR_VARS)  
    4.   
    5. LOCAL_MODULE := HelloWorld  
    6.   
    7. LOCAL_SRC_FILES:= HelloWorld.c  
    8.   
    9. include $(BUILD_SHARED_LIBRARY)  





    4 生成动态链接库
    在project文件夹里运行以下的命令
    1. zhycheng@zhycheng-Lenovo-B460:~/androidworkspace/HelloWorld$ ndk-build  
    2. Compile thumb  : HelloWorld <= HelloWorld.c  
    3. SharedLibrary  : libHelloWorld.so  
    4. Install        : libHelloWorld.so => libs/armeabi/libHelloWorld.so  



    这样就得到了libHelloWorld.so文件。这个文件在libs/armeabi目录里。

    5 执行整个project



    能够看到。在界面上显示了从动态链接库返回的字符串。


  • 相关阅读:
    Hadoop使用实例
    hdfs操作命令
    Hadoop安装与HDFS体系结构
    Linux和MySQL的安装与基本操作
    Hadoop演进与Hadoop生态
    作业一
    Shader笔记——9.简单灰色效果+遮罩
    iOS——xcodeproj脚本
    iOS——KSAdSDK
    UnityPlugins——4.SignInWithApple
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6885601.html
Copyright © 2020-2023  润新知