【问题标题】:Android Studio 2.2 Native Development Migration IssueAndroid Studio 2.2 原生开发迁移问题
【发布时间】:2017-01-28 23:42:15
【问题描述】:

在切换到 AS 2.2 之前,我有以下结构来实现我的 C

app/src/main/jni/Android.mk
app/src/main/jni/Application.mk
app/src/main/jni/headers/*
app/src/main/jni/cfiles*.cc

在这种情况下,一切正常。但是,升级到 AS 2.2 后,我无法构建任何 apk 并且总是收到以下错误:

Execution failed for task':app:transformNative_libsWithStripDebugSymbolForDebug java.lang.NullPointerException (no error message)

有人知道这是为什么吗?我似乎找不到解决办法。

【问题讨论】:

    标签: android android-studio gradle android-ndk android-gradle-plugin


    【解决方案1】:

    我在我的项目中解决了这个问题) 尝试将其添加到您的 build.gradle(模块)中

        externalNativeBuild {
        ndkBuild {
            path 'src/main/jni/Application.mk'
        }
    }
    

    Link Gradle to your native library

    【讨论】:

    • 谢谢。我会试试看。
    • 这消除了错误Execution failed for task':app:transformNative_libsWithStripDebugSymbolForDebug,但现在我收到Android NDK: WARNING: There are no modules to build in this project! 消息,因此我可能需要更改我的应用程序中的本机代码是如何使用AS 和Gradle 编译的。我正在尝试为包含本机 C 代码的 Android (github.com/Makeblock-official/Makeblock-App-For-Android) 构建 Makeblock 应用程序。
    【解决方案2】:

    我今天早上升级到 AS 2.2 并且遇到了同样的错误。升级 NDK 为我解决了这个问题。您现在可以通过 SDK Manager 升级,说明在这里:

    https://developer.android.com/studio/projects/add-native-code.html#download-ndk

    还要确保您的“local.properties”文件指向正确的 NDK 位置。示例 Windows local.properties:

    ndk.dir=C\:\\Users\\Me\\AppData\\Local\\Android\\sdk\\ndk-bundle
    sdk.dir=C\:\\Users\\Me\\AppData\\Local\\Android\\sdk
    

    【讨论】:

      【解决方案3】:

      这似乎是 2.2.0 及以上版本的 gradle android 构建工具的错误。导致我们的 CI 环境出现问题。

      请为下面的错误加注星标!

      https://code.google.com/p/android/issues/detail?id=223162

      现在我们正在恢复到 2.1.3 的旧版本工具

      【讨论】:

      • 感谢您分享此内容。我确实启动了这个错误,这实际上暂时解决了问题。
      【解决方案4】:

      我们今天在Rajawali 项目中遇到了同样的错误——也就是说,我们没有实现原生组件,而是使用了一个实现一些原生 OpenGL 组件的库。我想这以某种方式与 Android Studio 更新有关(在那台机器上,它是2.2.3),但我目前无法清楚地分辨出来。它只是“突然停止工作”。

      但是,我们需要升级到实验性的 Android 构建工具应用 Mike 的上述修复以使其正常工作。可以在here 找到(有些过时的)迁移指南。作为参考,我们只需要调整build.gradleapp/build.gradle,现在看起来如下:

      // build.gradle
      buildscript {
          repositories {
              jcenter()
          }
          dependencies {
              classpath 'com.android.tools.build:gradle-experimental:0.8.3'
              // used to be: 'com.android.tools.build:gradle:2.2.2'
          }
      }
      
      allprojects {
          repositories {
              mavenLocal()
              jcenter()
          }
      }
      

      ...和

      //app/build.gradle
      apply plugin: 'com.android.model.application'
      // used to be 'com.android.application'
      
      // android() migrated according to guide
      // note that buildConfigFields() is missing, because it lead to errors
      model {
          android {
              compileSdkVersion 19
              buildToolsVersion "21.1.2"
      
              defaultConfig {
                  applicationId "com.projecttango.experiments.augmentedrealitysample"
                  minSdkVersion.apiLevel 19
                  targetSdkVersion.apiLevel 19
                  versionCode 1
                  versionName "1.0"
              }
      
              buildTypes {
                  release {
                      minifyEnabled false
                      proguardFiles.add(file("proguard-rules.pro"))
                  }
              }
      
              productFlavors {
                  create("flavor1") {
                      applicationId "com.app"
                  }
              }
      
              sources {
                  main {
                      java {
                          source {
                              srcDir "src"
                          }
                      }
                  }
              }
      
              // Fix suggested by Mike above
              ndk {
                  platformVersion 21
              }
          }
      }
      
      // Remaining Rajawali "noise"
      def external_lib_prefix = null
      if (project.hasProperty("Tango.catkin_devel_prefix")) {
          external_lib_prefix = project.property("Tango.catkin_devel_prefix")
      } else {
          // Building in standalone sample form.
          external_lib_prefix = "../../TangoReleaseLibs"
      }
      
      repositories {
          flatDir {
              dirs external_lib_prefix + '/aar'
          }
      }
      
      dependencies {
          compile fileTree(dir: external_lib_prefix + '/jar', include: ['**/*.jar'])
          compile (name: 'tango_support_java_lib', ext: 'aar')
          compile 'org.rajawali3d:rajawali:1.1.668@aar'
      }
      

      完成后,请确保在 Android Studio 中同步 Gradle 项目。否则,当您尝试立即运行时,您会看到类似Task 'generateDebugSources' not found in project ':app' 的内容。

      【讨论】:

        【解决方案5】:

        我觉得这些解决方案中的很多都是矫枉过正的。很抱歉回答我自己的问题,但实际的解决方案几乎来自这里的每个帖子!

        就像@GregT 所说的那样,对我有用的是升级我已经安装的 NDK 包。而且,这样做实际上修改了*.mk 文件,就像@Matthew_Bondarchuk 的回答一样。

        因此,就像@aaronvargas 所说,这是一个错误;具体来说,Android NDK 系统没有与 Android Studio 2.2 实例化的升级一起更新。这会导致与 Android 构建工具不兼容,就像@Michael_Jess 所说的那样。

        【讨论】:

          【解决方案6】:

          我尝试了各种调整,为我解决了这个问题的一个是将 platformVersion 从它设置为的“19”更改为应用程序 build.gradle 的 model{android{ndk 部分中的“21”。这仅在实验版本中相关。我正在构建 compileSdkVersion 设置为 24,buildToolsVersion 设置为 24.0.2。

          【讨论】:

            【解决方案7】:

            升级你在app-module中的build.gralde配置:

            compileSdkVersion 23
            buildToolsVersion "24.0.2"
            

            这是我对compileSdkVersionbuildToolsVersion 的配置,对我有效,您需要将compileSdkVersionbuildToolsVersion 的配置更新为与gradle-plugin version 最匹配的配置。

            总之,一旦你升级了gradle-plugin version,你也应该升级你在build.gradle的配置,以确保你能得到正确的结果。

            【讨论】:

              猜你喜欢
              • 2017-03-03
              • 2015-12-28
              • 1970-01-01
              • 2015-12-30
              • 1970-01-01
              • 2020-05-28
              • 1970-01-01
              • 2011-04-25
              • 1970-01-01
              相关资源
              最近更新 更多