android - 未定义对 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'
}
有人可以审查它。
谢谢你。
解决方案
Windows
我已经在平台上构建了 ADL2 以Android
使用 进行部署Android Studio
,但是我没有按照教程进行操作,因为我已经有了一个最新的Android Studio
,SDK
并且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
中更改您应该更改的内容。src
main.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`)
推荐阅读
- python - 如何在 jinja 中显示 SQLAlchemy“一对多”子对象?
- java - 无法使用 JPArepository 和 Spring 框架从 Postgres 表中检索数据
- java - 在使用 Kafka-Client 在控制台上获取此类日志时
- node.js - 在 windows cmd (nodejs) 中更改行显示设置
- angular - 如何从“angularx-social-login”获取登录用户数据作为对象?
- c++ - 引用单个元素或向量的函数
- android - 带有 RecylcerView 的 Android Viewpager2,在应用 PageTransformer 时启用项目动画器
- reactjs - 如何在 PDFTron 中进行裁剪选择?
- docker - Docker 卷挂载提供父目录的根所有权
- arrays - React Native - 如何传递数组道具并接收不同的uri