Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.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
带有NDK构建的Android工作室——在项目导航器中不显示C++文件_Android_C++_Android Studio_Android Ndk_Android Studio 2.3 - Fatal编程技术网

带有NDK构建的Android工作室——在项目导航器中不显示C++文件

带有NDK构建的Android工作室——在项目导航器中不显示C++文件,android,c++,android-studio,android-ndk,android-studio-2.3,Android,C++,Android Studio,Android Ndk,Android Studio 2.3,我使用的是Android工作室,NDK构建,它不显示单个C++文件,所以我不能调试。它只显示了一个cpp文件夹,在该文件夹中显示了一些静态库,我无法进一步介绍。我记得曾经有一次,人们可以进入这些像文件夹一样打开的库,查看单个cpp文件 这是我的build.gradle文件: import java.util.regex.Pattern import com.android.build.OutputFile import org.apache.tools.ant.taskd

我使用的是Android工作室,NDK构建,它不显示单个C++文件,所以我不能调试。它只显示了一个cpp文件夹,在该文件夹中显示了一些静态库,我无法进一步介绍。我记得曾经有一次,人们可以进入这些像文件夹一样打开的库,查看单个cpp文件

这是我的build.gradle文件:

    import java.util.regex.Pattern
    import com.android.build.OutputFile
    import org.apache.tools.ant.taskdefs.condition.Os


    apply plugin: 'com.android.application'
    apply plugin: 'io.fabric'



    task('increaseVersionCode') << {
        def buildFile = file("build.gradle")
        def pattern = Pattern.compile("versionCode\\s+(\\d+)")
        def manifestText = buildFile.getText()
        def matcher = pattern.matcher(manifestText)
        matcher.find()
        def versionCode = Integer.parseInt(matcher.group(1))
        def manifestContent = matcher.replaceAll("versionCode " + ++versionCode + "")
        buildFile.write(manifestContent)
    }

    // DO NOT change the build.gradle on debug builds any longer, since this will lead to debugging not work and Android Studio / Gradle crash
    tasks.whenTaskAdded { task ->
        if (task.name == 'generateReleaseBuildConfig' /*|| task.name == 'generateDebugBuildConfig'*/) {
            task.dependsOn 'increaseVersionCode'
        }
    }



    task deleteGraphicsAssets(type: Delete) {
        println 'Grade: Deleting unnecessary assets...'
        delete "assets/1136p"
        delete "assets/2048p"
    }
    preBuild.dependsOn deleteGraphicsAssets




    android {
        // Going higher means that we have to request to write to external storage (used for UUID): https://stackoverflow.com/questions/36084959/cant-create-a-directory-on-storage-emulated-0-on-emulator
        // But GameAnalytics reqires 24, let's see if it still works this way
        compileSdkVersion 22
        buildToolsVersion '25.0.3' // should be 25 for newer version
        defaultConfig {
            applicationId "com.forestringgames.apps.towerduel"
            minSdkVersion 15
            // Going higher means that we have to request to write to external storage (used for UUID): https://stackoverflow.com/questions/36084959/cant-create-a-directory-on-storage-emulated-0-on-emulator
            // But GameAnalytics reqires 24, let's see if it still works this way
            targetSdkVersion PROP_TARGET_SDK_VERSION
            versionCode 1602
            versionName "1.0"
    //        multiDexEnabled true

            externalNativeBuild {
                ndkBuild {
                    if (!project.hasProperty("PROP_NDK_MODE") || PROP_NDK_MODE.compareTo('none') != 0) {
                        // skip the NDK Build step if PROP_NDK_MODE is none
                        targets 'cocos2dcpp'
                        arguments 'NDK_TOOLCHAIN_VERSION=4.9'
                        arguments 'APP_PLATFORM=android-' + PROP_TARGET_SDK_VERSION
    //                    arguments 'NDK_CCACHE='+System.getenv('NDK_CCACHE')

    //                    println 'A message which is logged at QUIET level:'+System.getenv('HOME')
    //                    println 'A message which is logged at QUIET level:'+System.getenv('NDK_CCACHE')
    //                    println "$System.env.HOME"


                        def module_paths = [project.file("../../FRGEngine/cocos2d").absolutePath,
                                            project.file("../../FRGEngine/cocos2d/cocos").absolutePath,
                                            project.file("../../FRGEngine/cocos2d/external").absolutePath]
                        if (Os.isFamily(Os.FAMILY_WINDOWS)) {
                            // should use '/'
                            module_paths = module_paths.collect { it.replaceAll('\\\\', '/') }
                            arguments 'NDK_MODULE_PATH=' + module_paths.join(";")
                        } else {
                            arguments 'NDK_MODULE_PATH=' + module_paths.join(':')
                        }

                        arguments '-j' + Runtime.runtime.availableProcessors()
                        abiFilters.addAll(PROP_APP_ABI.split(':').collect { it as String })
                    }
                }
            }
            testApplicationId 'Test'
        }

        // only added for android debugging
        externalNativeBuild {
            ndkBuild {
                if (!project.hasProperty("PROP_NDK_MODE") || PROP_NDK_MODE.compareTo('none') != 0) {
                    // skip the NDK Build step if PROP_NDK_MODE is none
                    path "jni/Android.mk"
                }
            }
        }

        sourceSets.main {
            java.srcDir "src"
            res.srcDir "res"
            jniLibs.srcDir "libs"
            manifest.srcFile "AndroidManifest.xml"
            assets.srcDir "assets"
        }
        splits {
            abi {
                enable true
                reset()
                include 'armeabi-v7a'
                //, 'armeabi',  'armeabi-v7a', 'x86'  - what about arm64? Test it with Crashlytics
                universalApk false  //true
            }

    //        density {
    //            enable true
    //            reset()
    //            include 'mdpi', 'hdpi', 'xhdpi', 'xxhdpi', 'xxxhdpi'
    //            compatibleScreens 'small', 'normal', 'large', 'xlarge'
    //
    //        }
        }
        signingConfigs {

            release {
                if (project.hasProperty("RELEASE_STORE_FILE")) {
                    storeFile file(RELEASE_STORE_FILE)
                    storePassword RELEASE_STORE_PASSWORD
                    keyAlias RELEASE_KEY_ALIAS
                    keyPassword RELEASE_KEY_PASSWORD
                }
            }
        }

        buildTypes {
            release {
                minifyEnabled false // Warning: is this a good idea?
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                if (project.hasProperty("RELEASE_STORE_FILE")) {
                    signingConfig signingConfigs.release
                }

                externalNativeBuild {
                    ndkBuild {
                        arguments 'NDK_DEBUG=0'
                    }
                }
            }

            debug {
    //            debuggable true
    //            jniDebuggable true

                externalNativeBuild {
                    ndkBuild {
                        arguments 'NDK_DEBUG=1'
                    }
                }
            }
        }

    }


crashlytics {
    enableNdk = true
    androidNdkOut = 'obj'
    androidNdkLibsOut = 'libs'

}

repositories {
    mavenCentral()
}

dependencies {
    //    compile 'com.android.support:multidex:1.0.1'
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':libcocos2dx')

    //    compile project(':BaseGameUtils')
    //    compile 'com.android.support:multidex:1.0.0'
    compile 'com.facebook.android:facebook-android-sdk:4.8.0'
    //    compile 'com.google.android.gms:play-services-auth:9.0.0'
    // integration guide (with latest version numbers: https://fabric.io/downloads/gradle)
    // Crashlytics KitminifyEnabled
    compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
        transitive = true
    }
    // NDK Kit
    compile('com.crashlytics.sdk.android:crashlytics-ndk:1.1.6@aar') {
        transitive = true
    }
    //    compile('com.crashlytics.sdk.android:crashlytics:2.7.0-SNAPSHOT@aar') {
    //        transitive = true;
    //    }
    //
    //    compile('com.crashlytics.sdk.android:crashlytics-ndk:1.2.0-SNAPSHOT:debug@aar') {
    //        transitive = true;
    //    }
    compile 'net.bytebuddy:byte-buddy:1.7.3'
    compile 'net.bytebuddy:byte-buddy-android:1.7.3'
    //    compile 'com.google.firebase:firebase-auth:11.0.1'
    compile 'com.google.android.gms:play-services-auth:11.0.0'
    compile 'com.google.android.gms:play-services-games:11.0.0'
    compile 'com.google.firebase:firebase-invites:11.0.0'
    compile 'com.google.firebase:firebase-messaging:11.0.0'
    compile 'com.anjlab.android.iab.v3:library:1.0.+'
    compile files('Frameworks/Fmod/prebuilt/android/fmod.jar')
    //    // use latest version instead version number: https://github.com/GameAnalytics/GA-SDK-ANDROID
    //    compile 'com.gameanalytics.sdk:gameanalytics-android:3.5.0'
    compile fileTree(include: ['*.jar'], dir: 'Frameworks/Jars')
    //
}

apply plugin: 'com.google.gms.google-services'
以下是Android.mk:

$(info ANDROID.MK FILE PARSING)

LOCAL_PATH := $(call my-dir)
CLASSES_PATH := $(LOCAL_PATH)/../../../Classes
PHOTON_SDK_ROOT := $(LOCAL_PATH)/../Frameworks/Photon


#
#
include $(CLEAR_VARS)
#
#
$(call import-add-path,$(LOCAL_PATH)/../../../FRGEngine/cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../../FRGEngine/cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../../FRGEngine/cocos2d/cocos)

#THE TRICK IS TO ACTUALLY NOT NAME FOLDERS TWICE - IF IMPORTING FRAMEWORKS HERE - THEN IMPORT /Fmod LATER - UNDER FRAMRWORKS
$(call import-add-path,$(LOCAL_PATH)/../Frameworks)


LOCAL_MODULE := cocos2dcpp_shared

LOCAL_MODULE_FILENAME := libcocos2dcpp

LOCAL_SRC_FILES := main.cpp \
                gameanalytics/GameAnalyticsJNI.cpp \
                $(subst $(LOCAL_PATH)/,,$(wildcard $(CLASSES_PATH)/*.cpp)) \
                $(subst $(LOCAL_PATH)/,,$(wildcard $(CLASSES_PATH)/*.c)) \
                $(subst $(LOCAL_PATH)/,,$(wildcard $(CLASSES_PATH)/../FrameworksCrossPlatform/libfixmath/*.c)) \
                $(subst $(LOCAL_PATH)/,,$(wildcard $(CLASSES_PATH)/../FrameworksCrossPlatform/libfixmath/*.cpp)) \
                $(subst $(LOCAL_PATH)/,,$(wildcard $(CLASSES_PATH)/../FrameworksCrossPlatform/ScreenLog/*.cpp)) \
                $(subst $(LOCAL_PATH)/,,$(wildcard $(CLASSES_PATH)/../FrameworksCrossPlatform/PlayFabClientSDK/*.c)) \
                $(subst $(LOCAL_PATH)/,,$(wildcard $(CLASSES_PATH)/../FrameworksCrossPlatform/PlayFabClientSDK/*.cpp)) \
                $(subst $(LOCAL_PATH)/,,$(wildcard $(CLASSES_PATH)/../FrameworksCrossPlatform/GameAnalytics/*.cpp)) 


LOCAL_CFLAGS += -fpermissive 

ifeq ($(DISTRIBUTION_TESTING),1)    
    $(info ADDING DISTRIBUTION TESTING PREPROCESSOR FLAG)
    LOCAL_CFLAGS += -DDISTRIBUTION_TESTING=1
endif

ifeq ($(DISTRIBUTION_LIVE),1)   
    $(info ADDING DISTRIBUTION LIVE PREPROCESSOR FLAG)
    LOCAL_CFLAGS += -DDISTRIBUTION_LIVE=1
endif


# _COCOS_HEADER_ANDROID_BEGIN

LOCAL_C_INCLUDES := $(CLASSES_PATH) \
                    $(CLASSES_PATH)/../FrameworksCrossPlatform/libfixmath \
                    $(CLASSES_PATH)/../FrameworksCrossPlatform/ConcurrentQueue \
                    $(CLASSES_PATH)/../FrameworksCrossPlatform/PlayFabClientSDK \
                    $(CLASSES_PATH)/../FrameworksCrossPlatform/ScreenLog \
                    $(CLASSES_PATH)/../FrameworksCrossPlatform/GameAnalytics \
                    $(CLASSES_PATH)/../FrameworksCrossPlatform \
                    $(PHOTON_SDK_ROOT) \
                    $(LOCAL_PATH)/../Frameworks/Fmod/lowlevel/inc \
                    $(LOCAL_PATH)/gameanalytics

# _COCOS_HEADER_ANDROID_END


LOCAL_STATIC_LIBRARIES := cocos2dx_static loadbalancing-cpp-static-prebuilt photon-cpp-static-prebuilt common-cpp-static-prebuilt
LOCAL_SHARED_LIBRARIES := fmod
LOCAL_SHARED_LIBRARIES += fmodstudio

# _COCOS_LIB_ANDROID_BEGIN

include $(BUILD_SHARED_LIBRARY)

$(call import-module,.)




# _COCOS_LIB_IMPORT_ANDROID_BEGIN
# _COCOS_LIB_IMPORT_ANDROID_END


# PHOTON

$(call import-add-path,$(PHOTON_SDK_ROOT)/LoadBalancing-cpp/lib)
$(call import-module,loadbalancing-cpp-prebuilt)

# FMOD
#THE TRICK IS TO ACTUALLY NOT NAME FOLDERS TWICE - IF IMPORTING FRAMEWORKS HERE - THEN IMPORT /Fmod LATER - UNDER FRAMRWORKS
$(call import-module,Fmod/prebuilt/android)


# _COCOS_LIB_ANDROID_END
这是Android Studio中的外观:

我休息了一段时间,评论发生了什么事:

无论如何,根据本文档,您应该将cpp组文件夹放在java文件夹下

查看这里的说明


当我在CMake项目中遇到这个问题时,解决方案是我没有将.cpp文件正确添加到CMakeLists.txt

当我用这样的条目编辑CmakeList时

add_library( # Sets the name of the library.
         myNative-lib
         # Sets the library as a shared library.
         SHARED
         # Provides a relative path to your source file(s).
         myCppFile.cpp )

然后我可以看到myCppFile.cpp。

在我的例子中,NDK在 项目结构| SDK位置| Android NDK位置 即使NDK是与SDK管理器一起安装的


单击组合框并选择NDK后,cpp文件夹开始填充my native sources。

您的gradle构建工具使用的是什么版本? 我以前使用的是旧版本,直到我将其更改为3.4.2,并且可以在项目层次结构中看到我的文件

buildscript {
repositories {
    google()
    jcenter()
}

dependencies {
    classpath 'com.android.tools.build:gradle:3.4.2'
   }
}
首先下载NDK

转到文件-项目结构并单击SDK位置选项卡

然后将路径移动到C://with full project请勿尝试仅导入项目内的模块

再次从C导入项目://

如果你没有成功,尝试其他途径,尝试,尝试,尝试

您必须尝试,因为问题是您必须为您的CmalLists.txt找到正确的路径。。。 示例设置Oboe库目录的路径
设置双簧管方向../../../../。。。。。。等但有时路径并不是你们看到的路径…

谢谢,但我相信我已经完成了指南中的所有内容。查看我现在添加的屏幕截图,这样你就可以看到它对我的影响。同样的问题在这里,除了使用CMake,我找不到任何东西,但我们无法做到这一点,因为我们使用了不同的项目生成系统,实际上刚刚实现了这一点,结果证明,在android studio运行配置的模式下,它无意中导致无效选项被传递到makefiles,这意味着它没有正确地计算它们。
buildscript {
repositories {
    google()
    jcenter()
}

dependencies {
    classpath 'com.android.tools.build:gradle:3.4.2'
   }
}