android - 如何使用android创建dll

标签 android

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

最佳答案

至于我,我曾经为自己做了一个关于 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.

更新:一步一步没有插件

必需的应用程序 - 这是您开发 native 应用程序所需要的。在我的例子中,我使用 Eclipse + Android ADT 插件 + Android CDT 插件 + Sequoyah 插件。您可以使用 Eclipse 安装它们 ->安装新软件

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

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

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

之后您可以创建新的 Android 项目。然后您可以创建定义 native 方法的 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 header 。它应该看起来像:

/* 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 目录并运行以下命令。它将此 header 移动到 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。就这样。之后你可以在你的 Activity 中测试它:

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));
    }
}

有了插件,开发起来会容易一些。但我认为您应该自己测试如何执行此操作。

关于android - 如何使用android创建dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8656500/

相关文章:

Android 不按顺序调用方法

android - MoPub:广告加载失败

android - 如何清除 Android 设备关机时的默认 Activity ?

安卓 SDK : full-screen floating context menu since Android 8. 0 (API 26+)

android - 如何在 Android Studio 中更改 Linphone 的项目名称?

android - 相机设置参数在三星上失败 - Android

java - 生成 Google App Engine 后端(JDK 1.8,安装了新的 ADT)时,注释仅适用于 java 1.5 及更高版本

php - 解析数据 org.json.JsonException : Value &lt;! DOCTYPE 时出错的延续

android - 使用 NDK for Android 编写 OpenGL 代码

android - 新手,安装应用程序到三星手机