简体   繁体   English

无法获取源代码以在Android Studio的JNI文件夹中构建

[英]Can't get source code to build in JNI folder in Android Studio

I am using Android Studio 1.3 with the experimental NDK plugin enabled. 我正在启用实验性NDK插件的情况下使用Android Studio 1.3。 I have dropped the entire Box2d folder into the jni folder in android studio along with Android.mk and Application.mk. 我已将整个Box2d文件夹以及Android.mk和Application.mk放入android studio的jni文件夹中。 Android studio seems to be completely ignoring the .mk files since when I change them nothing happens. Android Studio似乎完全忽略了.mk文件,因为当我更改它们时,什么也没有发生。 Anyway I'm trying to compile Box2d when I get directoy not found errors. 无论如何,当我遇到Directoy找不到错误时,我正在尝试编译Box2d。 Error:(19, 42) Box2D/Collision/b2BroadPhase.h: No such file or directory . Error:(19, 42) Box2D/Collision/b2BroadPhase.h: No such file or directory

Android.mk Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= liquidfun

LOCAL_C_INCLUDES := $(LOCAL_PATH)/Box2D/Collision \
            $(LOCAL_PATH)/Box2D/Collision/Shapes \
            $(LOCAL_PATH)/Box2D/Common \
            $(LOCAL_PATH)/Box2D/Dynamics \
            $(LOCAL_PATH)/Box2D/Dynamics/Contacts \
            $(LOCAL_PATH)/Box2D/Dynamics/Joints \
            $(LOCAL_PATH)/Box2D/Dynamics/Particle \
            $(LOCAL_PATH)/Box2D/Rope



include $(BUILD_SHARED_LIBRARY)

build.gradle build.gradle

apply plugin: 'com.android.model.application'
model {
    android {
        compileSdkVersion = 21
        buildToolsVersion = "22.0.1"

        defaultConfig.with {
            applicationId = "com.mycompany.mygame"
            minSdkVersion.apiLevel = 15
            targetSdkVersion.apiLevel = 21
            versionCode = 1
            versionName = "1.0"
        }
    }
    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles += file('proguard-rules.pro')
        }
    }
    android.ndk {
        moduleName = "liquidfun"
    }
}
def liquidFunDir = new File("${projectDir}/src/main/java/com/google/fpl/liquidfun")

task createLiquidFunDir {
    liquidFunDir.mkdirs()
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.1'
}

Any tips would be much appreciated. 任何提示将不胜感激。 Thanks. 谢谢。

Are you trying to compile in windows? 您是否要在Windows中编译? if so use "\\" instead of "/" in Android.mk like this: $(LOCAL_PATH)\\Box2D\\Common \\ 如果是这样,请在Android.mk中使用“ \\”代替“ /”,例如: $(LOCAL_PATH)\\Box2D\\Common \\

If this doesn't help try to specify the includes in "build.gradle" file like this: 如果这样做没有帮助,请尝试在“ build.gradle”文件中指定包含内容,如下所示:

android.ndk {
    moduleName ="liquidfun"
    CFlags += "-I${file("src/main/jni/Box2D/Collision")}".toString()
}

Hey I had a similiar issue. 嘿,我有一个类似的问题。 The gradle plugin does not respect your Android.mk file. gradle插件不尊重您的Android.mk文件。 It creates a temp Android.mk for your project. 它为您的项目创建一个临时的Android.mk。

To add Cflags for in the new experimental android plugin: 要在新的实验性Android插件中添加Cflags,请执行以下操作:

apply plugin: 'com.android.model.application'
model {
    android {
        compileSdkVersion = 21
        buildToolsVersion = "22.0.1"

        defaultConfig.with {
            applicationId = "com.mycompany.mygame"
            minSdkVersion.apiLevel = 15
            targetSdkVersion.apiLevel = 21
            versionCode = 1
            versionName = "1.0"
        }
    }
    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles += file('proguard-rules.pro')
        }
    }
    android.ndk {
        CFlags += "-I${projectDir}/src/main/jni/Box2D/Collision".toString()
        CFlags += "-I${projectDir}/src/main/jni/Box2D/Collision/Shapes".toString()
        CFlags += "-I${projectDir}/src/main/jni/Box2D/Dynamics".toString()
        CFlags += "-I${projectDir}/src/main/jni/Box2D/Dynamics/Contacts".toString()
        CFlags += "-I${projectDir}/src/main/jni/Box2D/Dynamics/Joints".toString()
        CFlags += "-I${projectDir}/src/main/jni/Box2D/Dynamics/Particle".toString()
        CFlags += "-I${projectDir}/src/main/jni/Box2D/Rope".toString()

        cppFlags += "-I${projectDir}/src/main/jni/Box2D/Collision".toString()
        cppFlags += "-I${projectDir}/src/main/jni/Box2D/Collision/Shapes".toString()
        cppFlags += "-I${projectDir}/src/main/jni/Box2D/Dynamics".toString()
        cppFlags += "-I${projectDir}/src/main/jni/Box2D/Dynamics/Contacts".toString()
        cppFlags += "-I${projectDir}/src/main/jni/Box2D/Dynamics/Joints".toString()
        cppFlags += "-I${projectDir}/src/main/jni/Box2D/Dynamics/Particle".toString()
        cppFlags += "-I${projectDir}/src/main/jni/Box2D/Rope".toString()
        moduleName = "liquidfun"
    }
}
def liquidFunDir = new File("${projectDir}/src/main/java/com/google/fpl/liquidfun")

task createLiquidFunDir {
    liquidFunDir.mkdirs()
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.1'
}

Also it looks like you are compiling against sdk 10. @ph0b ( https://stackoverflow.com/a/31365158/5105445 ) posted an answer that make it impossible to run on anything < lolipop. 同样,您似乎正在针对sdk 10进行编译。@ ph0b( https://stackoverflow.com/a/31365158/5105445 )发布了一个答案,该内容使它无法在<lolipop上运行。

Hope it helps 希望能帮助到你

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM