Android studio 将Android ndk应用程序迁移到Android Studio(gradle实验版0.2.0)
我试图根据将现有ndk项目转换为Android Studio,但无法解决所有错误 现在我得到以下错误: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
/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分支