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