我已尝试根据http://ph0b.com/new-android-studio-ndk-support/#usingndkbuild将现有的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
...
的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()
}
}
的gradle /包装/ 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
应用程序/的build.gradle
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')
}
应用程序/ SRC /主/ 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)
答案 0 :(得分:3)
简单的方法是迁移NDK项目不要导入项目请使用相同的包名完全复制文件,并在依赖项中添加支持的lib正确地进行classl同步,并支持min和max。
答案 1 :(得分:0)
您可以享受ndk-build的全部功能,并通过Android Stidio中的本机调试获得实验级插件的支持,请参阅define LOCAL_SRC_FILES in ndk{} DSL
答案 2 :(得分:0)
错误是因为src / main / jni / include不在包含路径中,请将其添加到
cppFlags.addAll([' -I' + file(' src / main / jni / include')])
示例在Teapot中
主要是因为android studio / gradle递归编译源文件,但它不会在路径中添加子目录以包含路径;你需要手动处理它。
希望你没有在那里使用libcrypto-static.a:静态lib需要支持不同的ABI [检查你现有的application.mk],所以一个lib将有不同的二进制文件用于不同的ABI。建立自己和使用是很好的; Teapot将native-app-glue构建为静态lib并在本地使用它。对于libECDSA.so也是如此;除非你只为一种armeabi风格构建,否则Android Studio会抱怨没有找到其他ABI库。您可以在同一个仓库中检查hello-libs。
当涉及到lib使用时,cmake要简单得多。如果您选择cmake,则示例位于同一个repo,master-cmake分支中。