Android studio 将Android ndk应用程序迁移到Android Studio(gradle实验版0.2.0)

Android studio 将Android ndk应用程序迁移到Android Studio(gradle实验版0.2.0),android-studio,gradle,android-ndk,migration,android-gradle-plugin,Android Studio,Gradle,Android Ndk,Migration,Android Gradle Plugin,我试图根据将现有ndk项目转换为Android Studio,但无法解决所有错误 现在我得到以下错误: /home/nxp/Documents/Projects/Android_Ucode_demo/app/src/main/jni/ECDSA-jni.c Error:(44, 30) openssl/ossl_typ.h: No such file or directory 文件夹结构: app build ... libs ... src main

我试图根据将现有ndk项目转换为Android Studio,但无法解决所有错误

现在我得到以下错误:

/home/nxp/Documents/Projects/Android_Ucode_demo/app/src/main/jni/ECDSA-jni.c 
Error:(44, 30) openssl/ossl_typ.h: No such file or directory
文件夹结构:

app
  build
    ...
  libs
    ...
  src
    main
      assets
        ...
      java
        ...
      jni
        include.openssl
          ...
          ossl_type.h
          ...
        Android.mk
        libcrypto-static.a
        ECDSA-jni.c
      jniLibs
        armeabi
          libECDSA.so
      res
        ...
      AndroidManifest
    app.iml
    build.gradle
    lint.xml
build
  ...
gradle
  ...
...
build.gradle
...
格雷德尔先生

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        //classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.android.tools.build:gradle-experimental:0.2.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}
apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion = 22
        buildToolsVersion = "23.0.1"

        defaultConfig.with {
            applicationId = "com.mycompany.myapp"
            minSdkVersion.apiLevel = 15
            targetSdkVersion.apiLevel = 22
        }
    }

    android.ndk {
        moduleName = "openssl"
    }



    android.sources{
        main.jni {
            source {
                srcDirs = ['src/main/jni']
            }
        }
        main.jniLibs {
            source {
                srcDirs = ['src/main/jniLibs']
            }
        }
    }

    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles += file('proguard-rules.txt')
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:22.0.0'
    compile files('libs/aretepoplib.jar')
}
gradle/wrapper/gradle-wrapper.properties

#Thu Sep 17 09:57:00 CEST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip
app/build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        //classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.android.tools.build:gradle-experimental:0.2.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}
apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion = 22
        buildToolsVersion = "23.0.1"

        defaultConfig.with {
            applicationId = "com.mycompany.myapp"
            minSdkVersion.apiLevel = 15
            targetSdkVersion.apiLevel = 22
        }
    }

    android.ndk {
        moduleName = "openssl"
    }



    android.sources{
        main.jni {
            source {
                srcDirs = ['src/main/jni']
            }
        }
        main.jniLibs {
            source {
                srcDirs = ['src/main/jniLibs']
            }
        }
    }

    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles += file('proguard-rules.txt')
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:22.0.0'
    compile files('libs/aretepoplib.jar')
}
app/src/main/jni/Android.mk

LOCAL_PATH := $(call my-dir)
$(info LOCAL_PATH := $(LOCAL_PATH))

include $(CLEAR_VARS)
LOCAL_MODULE := openssl
LOCAL_SRC_FILES = libcrypto-static.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_C_INCLUDES:= $(LOCAL_PATH)/include frameworks/base/include 
LOCAL_LDLIBS    := -llog -lGLESv2
LOCAL_MODULE    := ECDSA
LOCAL_SRC_FILES := ECDSA-jni.c
LOCAL_STATIC_LIBRARIES := openssl
include $(BUILD_SHARED_LIBRARY)

简单的方法是迁移NDK项目。不要导入项目。请使用完全相同的包名复制您的文件,并在依赖项中添加支持库。正确地进行gradel同步,支持最小值和最大值。

您可以充分享受ndk build的强大功能,并在Android Stidio中获得带有本机调试的实验级插件的支持,请参见错误是因为src/main/jni/include不在include路径内,请使用
addAll(['-I'+文件('src/main/jni/include')) 示例见
主要是因为androidstudio/gradle递归编译源文件,但它不会在包含路径的过程中添加子目录;您需要手动处理它

希望您没有使用libcrypto static.a:静态库需要支持不同的ABI[检查您现有的应用程序.mk],因此一个库将为不同的ABI提供不同的二进制文件。这是很好的建立自己和使用;Teapot将本机应用程序glue构建为静态库,并在本地使用它。libECDSA.so也是如此;除非你只为一种armeabi风格而构建,否则Android Studio会抱怨找不到其他ABI库。您可以在同一回购协议中检查hello LIB

说到lib的使用,cmake要简单得多。如果您选择,示例在同一回购协议中,即master cmake分支