首页 > 解决方案 > 未定义对 sdl_function Android Studio 的引用

问题描述

我正在尝试sd在 Android 上运行我的 l 游戏,我按照lazyfoo's教程运行helloworld,它运行良好,后来我导入了我的项目,这个项目源在 windows 中运行良好,没有任何错误,但我现在在我的文件中看到很多错误,我是 android 新手,我觉得我的源文件的路径搞砸了。以下是错误:

错误

Android.mk(在 src 目录内):

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := main

SDL_PATH := ../SDL2

LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include $(LOCAL_PATH)/../SDL2_image/ $(LOCAL_PATH)/../SDL2_ttf/ $(LOCAL_PATH)/../SDL2_mixer/ $(LOCAL_PATH)/src/Engine/coremodules/ $(LOCAL_PATH)/src/Engine/coremodules/UI $(LOCAL_PATH)/src/

# Add your application source files here...
LOCAL_SRC_FILES := main.cpp TestAnimator.cpp TestApplication.cpp TestScene.cpp TestPlayer.cpp Engine/coremodules/EActor.cpp Engine/coremodules/EAnimationClip.cpp Engine/coremodules/EAnimationController.cpp Engine/coremodules/EApplication.cpp Engine/coremodules/EAudioChunkComponent.cpp Engine/coremodules/EAudioMusicComponent.cpp Engine/coremodules/ECamera.cpp Engine/coremodules/EDebug.cpp Engine/coremodules/EGameObject.cpp Engine/coremodules/EInput.cpp Engine/coremodules/EScene.cpp Engine/coremodules/EText.cpp Engine/coremodules/ETexture.cpp Engine/coremodules/ETimer.cpp Engine/coremodules/ETransform.cpp Engine/coremodules/EUtil.cpp Engine/coremodules/EVector.cpp Engine/coremodules/EWindow.cpp Engine/coremodules/UI/EUIComponents.cpp Engine/coremodules/UI/EUIController.cpp

LOCAL_SHARED_LIBRARIES := SDL2 SDL2_image SDL2_ttf SDL2_mixer

LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog

LOCAL_CPPFLAGS += -std=c++11


include $(BUILD_SHARED_LIBRARY)

应用程序.mk:

# Uncomment this if you're using STL in your project
# See CPLUSPLUS-SUPPORT.html in the NDK documentation for more information
APP_STL := stlport_static
#armeabi-v7a arm64-v8a x86 x86_64
APP_ABI := armeabi-v7a arm64-v8a x86 x86_64

# Min runtime API level
APP_PLATFORM=android-14

构建.gradle

def buildAsLibrary = project.hasProperty('BUILD_AS_LIBRARY');
def buildAsApplication = !buildAsLibrary
if (buildAsApplication) {
    apply plugin: 'com.android.application'
}
else {
    apply plugin: 'com.android.library'
}

android {
    compileSdkVersion 19
    buildToolsVersion "26.0.1"
    defaultConfig {
        if (buildAsApplication) {
            applicationId "org.libsdl.app"
        }
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
        externalNativeBuild {
            ndkBuild {
                arguments "APP_PLATFORM=android-14"
            }
        }
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        jackOptions {
            enabled true
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    if (!project.hasProperty('EXCLUDE_NATIVE_LIBS')) {
        sourceSets.main {
            jniLibs.srcDir 'libs'
        }

        externalNativeBuild {
            ndkBuild {
                path 'jni/Android.mk'
            }
        }

    }
    lintOptions {
        abortOnError false
    }

    if (buildAsLibrary) {
        libraryVariants.all { variant ->
            variant.outputs.each { output ->
                def outputFile = output.outputFile
                if (outputFile != null && outputFile.name.endsWith(".aar")) {
                    def fileName = "org.libsdl.app.aar";
                    output.outputFile = new File(outputFile.parent, fileName);
                }
            }
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'
}

有人可以审查它。

谢谢你。

标签: androidandroid-studiosdlgame-enginesdl-2

解决方案


Windows我已经在平台上构建了 ADL2 以Android使用 进行部署Android Studio,但是我没有按照教程进行操作,因为我已经有了一个最新的Android StudioSDK并且NDK构建了 System.

您在问题中显示的内容似乎还可以(很像原始项目)。

我这样做了:

  • 已下载SDL2
  • 提取档案(到C:\Android\SDL2-2.0.8
  • 导入项目 android-project (from C:\Android\SDL2-2.0.8\android-project)
  • SDL将, 和 src 目录Android.mk和文件复制(非符号链接)Application.mk到 jni 目录。
  • main.c用我的代码在目录中添加了一个src并将该名称放入Android.mk

我不需要更改应用程序级别的任何内容,只需在自定义目录 ( )build.gradle中更改您应该更改的内容。srcmain.c

我确实需要将项目更新为Gradle 4.4( plugin 3.1.2),因为它只会构建一个库,而不是ndkBuild(bug) 中的两个。

我的JNI结构:

C:\Android\SDL2-2.0.8\android-project\app\jni  --+
                                                 ¦
+------------------------------------------------+
V
¦
>---Android.mk             <-----(`ndkBuild` file)
>---Application.mk         <-----(`ndkBuild` file)
¦
+---SDL
¦   +---include
¦   ¦
¦   +---src
¦       ¦
¦       +---atomic
¦       ¦
¦       +---audio
¦       ¦
¦       +---core
¦       ¦
¦       +---filesystem
¦       ¦
¦       +---haptic
¦       ¦
¦       +---joystick
¦       ¦
¦       +---libm
¦       ¦
¦       +---loadso
¦       ¦
¦       +---main
¦       ¦
¦       +---power
¦       ¦
¦       +---render
¦       ¦
¦       +---stdlib
¦       ¦
¦       +---test
¦       ¦
¦       +---timer
¦       ¦
¦       +---video         <-----`SDL_video.c` (`SDL_CreateWindow()` )
¦       
+---src                   <-----(your custom directory for `main.c`)

推荐阅读