如何使用android创建dll

时间:2011-12-28 13:25:03

标签: android

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

2 个答案:

答案 0 :(得分:4)

至于我,我曾经为自己做过关于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安装它们 - &gt;安装新软件

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

对于配置:您应该只定义Eclipse中NDK的路径 - &gt;窗口 - &gt;偏好 - &gt; Android - &gt;本土发展

您没有义务使用这些插件,但使用它们更容易开发。但是,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));
    }
}

使用插件可以更容易开发。但我认为你应该自己测试一下如何做到这一点。

答案 1 :(得分:0)

您可以在http://developer.android.com/sdk/ndk/index.html查看Android NDK。 NDK可用于创建windows .dll文件的等价.so文件。