Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在EclipseAndroid应用程序中使用本机代码_Android_C++_C_Native - Fatal编程技术网

在EclipseAndroid应用程序中使用本机代码

在EclipseAndroid应用程序中使用本机代码,android,c++,c,native,Android,C++,C,Native,我在eclipse中有一个android应用程序项目,我需要能够从位图创建gif文件。所以在四处搜索之后,我发现有一些方法可以做到这一点。我的问题是,我不知道如何将此代码导入到我的项目中。我环顾四周,我相信我应该向库构建路径添加一个JAR文件,但我没有JAR文件,只有几个C/C++文件(请参阅链接) 我没有使用C/C++的经验,我只使用它来创建gif文件。基本上,我想知道是否有人能指导我使用C/C++代码。我试过安装NDK和cygwin,但不知道还能做什么。这是我尝试过的代码,但它失败了,因为它

我在eclipse中有一个android应用程序项目,我需要能够从位图创建gif文件。所以在四处搜索之后,我发现有一些方法可以做到这一点。我的问题是,我不知道如何将此代码导入到我的项目中。我环顾四周,我相信我应该向库构建路径添加一个JAR文件,但我没有JAR文件,只有几个C/C++文件(请参阅链接)

我没有使用C/C++的经验,我只使用它来创建gif文件。基本上,我想知道是否有人能指导我使用C/C++代码。我试过安装NDK和cygwin,但不知道还能做什么。这是我尝试过的代码,但它失败了,因为它找不到gifflen

static {
    System.loadLibrary("gifflen");
}

public native int Init(String gifName, int w, int h, int numColors,
        int quality, int frameDelay);

public native void Close();

public native int AddFrame(int[] inArray);

public void download(DrawCanvas canvas) {
    String path = DOWNLOADS_PATH + File.separator + mName + ".gif";
    int width = canvas.getWidth();
    int height = canvas.getHeight();
    int result = Init(path, width, height, 256, 100, 4);
    if (result == 0) {
        List<AbstractShape> oldShapes = canvas.getShapes();
        for (Page page : mPages) {
            canvas.setShapes(page.getShapes());
            Bitmap bitmap = canvas.getBitmap();
            int[] pixels = new int[width * height];
            bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
            AddFrame(pixels);
        }
        canvas.setShapes(oldShapes);
        Close();
    } else {
        Log.d("DEBUG", "init failed");
    }
}

您首先需要了解JNI(Java本机接口),使用它可以将c/c++代码与Java/android代码连接起来。我以前在ndk上工作过,所以我建议您从AndroidNDK自述中进行一些阅读

要求:

*从Android官方网站下载Android ndk

*安装cygwin for windows,我建议您在ndk中使用linux进行开发,因为那里有现成的终端

*使用ndk路径设置环境变量

*在Android项目内部创建一个Director“jni

*此文件夹应包含所有c/c++文件。以及一个android makefile“android.mk”,android ndk构建将使用该文件编译您需要在android应用程序中使用的c/c++程序

*现在,如何使用JNI将您的android应用程序与您的c/c++代码粘合在一起,您可以在“Marakana for android ndk”的视频中看到。相同的链接如下所示:

满足您需求的makefile的内容包括:

    LOCAL_PATH := $(call my-dir)
    TARGET_ARCH_ABI := armeabi-v7a
    include $(CLEAR_VARS)
    LOCAL_MODULE    := gifflen
    LOCAL_ARM_MODE := arm
    LOCAL_C_INCLUDES := \./Include/
    LOCAL_SRC_FILES := \./Source/dib.c \./Source/gifflen.c
    include $(BUILD_SHARED_LIBRARY)
    $(call import-module)

在jni下,将创建源文件夹和Include文件夹放在下面。在源目录中添加.c/cpp文件,在Include目录中添加.h文件

我已经查看了NDK并将文件移动到jni目录。之后,我在项目目录的cmd中尝试了“ndk build”命令。该命令已被识别,但我得到了一个错误:jni/gifflen.cpp:943:1:致命错误:打开依赖项文件。/obj/local/armeabi/objs/gifflen/gifflen.o.d:没有这样的文件或目录注释Android.mk和试用中的最后一行。
Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersi
on 11 in ./AndroidManifest.xml
Android NDK: jni/Android.mk: Cannot import module with spaces in tag: ''
Android NDK: jni/Android.mk: Cannot find module with tag '' in import path
Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ?

Android NDK: The following directories were searched:
Android NDK:
jni/Android.mk:9: *** Android NDK: Aborting.    .  Stop.
    LOCAL_PATH := $(call my-dir)
    TARGET_ARCH_ABI := armeabi-v7a
    include $(CLEAR_VARS)
    LOCAL_MODULE    := gifflen
    LOCAL_ARM_MODE := arm
    LOCAL_C_INCLUDES := \./Include/
    LOCAL_SRC_FILES := \./Source/dib.c \./Source/gifflen.c
    include $(BUILD_SHARED_LIBRARY)
    $(call import-module)