【问题标题】:How to create dll using android如何使用android创建dll
【发布时间】:2011-12-30 23:30:22
【问题描述】:

我是 Android 应用程序开发的新手。我想使用 android 开发一个 dll。是否可以开发并集成到android应用程序。请告诉我解决方案。如果可以,请一一告诉我解决方法。

【问题讨论】:

    标签: android


    【解决方案1】:

    就我而言,我曾经为自己做了一个关于 NDK 的笔记。这里是:

    Required applicaitions:
    1. Eclipse
    2. CDT+Sequoyah plug-ins
    3. Android ADT
    4. Android NDK
    
    
    Configuration:
    1. Install Eclipse, ADT, CDT and Sequoyah plug-ins
    2. In the Eclipse -> Window -> Preferences -> Android -> Native Development put NDK location
    
    
    Steps:
    1. Create new Android Project
    2. Create Java class for working with native libraries (NativeLibrary.java)
    3. In the class NativeLibrary.java define interface for native methods
    4. Right click on Project -> Android Tools -> Add Native Support. Define name of the library.
    5. Build the project
    6. Go to PROJECT_HOME/bin
    7. Create C header file with the command javah -jni <packagename>.NativeLibrary
    8. Move this file to PROJECT_HOME/jni folder
    9. Implement methods from the header file in the generated cpp file. Do not forget to include the moved header in this file.
    10. In java classes create new object of NativeLibrary class and call its methods.
    11. Build project.
    

    更新:不使用插件一步一步

    必需的应用程序 - 这是您开发本地应用程序所需要的。就我而言,我使用 Eclipse + Android ADT 插件 + Android CDT 插件 + Sequoyah 插件。您可以使用 Eclipse 安装它们 -> 安装新软件

    然后您应该下载 Android NDK。您还应该将 PATH 导出到它。

    对于配置:您应该只在 Eclipse -> Window -> Preferences -> Android -> Native Development 中定义 NDK 的路径

    您不必使用这些插件,但使用它们进行开发更容易。但是,Sequoyah 包含错误(或者有时没有为我的计算机正确配置)

    之后,您可以创建新的 Android 项目。然后您可以创建定义本机方法的 java 类。在我的例子中,这是 NativeLibrary.java。这里是:

    package com.testpack.nativetest;
    
    public class NativeLibrary {
    public native static int add(int a, int b);
    
    static {
        System.loadLibrary("nativ");
    }
    }
    

    然后构建您的 Android 项目。之后转到您的 bin/classes (我不知道,但在它只是 bin 目录之前)目录:

    cd ~/programming/android/workspace/NativeTest/bin/classes
    

    并运行以下命令:

    javah -jni com.testpack.nativetest.NativeLibrary
    

    此命令应在您的 bin/classes 目录中生成 com_testpack_nativetest_NativeLibrary.h 标头。它应该看起来像:

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class com_testpack_nativetest_NativeLibrary */
    
    #ifndef _Included_com_testpack_nativetest_NativeLibrary
    #define _Included_com_testpack_nativetest_NativeLibrary
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_testpack_nativetest_NativeLibrary
     * Method:    add
     * Signature: (II)I
     */
    JNIEXPORT jint JNICALL Java_com_testpack_nativetest_NativeLibrary_add
      (JNIEnv *, jclass, jint, jint);
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif
    

    在您的项目中创建 jni 目录并运行以下命令。它会将这个头文件移动到 jni 目录。

    mv com_testpack_nativetest_NativeLibrary.h ../../jni
    

    之后在 jni 目录中创建 .c 文件。在我的例子中是 nativ.c,从 .h 文件中复制函数的定义并生成代码:

    #include "com_testpack_nativetest_NativeLibrary.h"
    
    JNIEXPORT jint JNICALL Java_com_testpack_nativetest_NativeLibrary_add
      (JNIEnv *env, jclass obj, jint a, jint b) {
    return a+b;
      }
    

    然后在 jni 目录下你应该创建一个 make 文件 Android.mk 在这里。只需更改源 (nativ.c) 和库的名称 (nativ)。

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_MODULE    := nativ
    LOCAL_SRC_FILES := nativ.c
    
    include $(BUILD_SHARED_LIBRARY)
    

    转到 PROJECT_HOME 目录。就我而言,这是

    cd ~/programming/android/workspace/NativeTest
    

    并运行 ndk-build。就这样。之后,您可以在您的活动中对其进行测试:

    package com.testpack.nativetest;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    
    public class NativeTestActivity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Log.d("TEST:", "Result 5+4=" + NativeLibrary.add(5, 4));
        }
    }
    

    有了插件,开发起来会更容易一些。但我认为你应该自己测试一下如何做到这一点。

    【讨论】:

    • 嗨 Yury,你能详细解释一下吗?我没有从你的步骤中正确理解。
    【解决方案2】:

    您可以在此处查看 Android NDK,http://developer.android.com/sdk/ndk/index.html。 NDK 可用于创建 Windows .dll 文件的 linux 等效 .so。

    【讨论】:

    猜你喜欢
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多