1.Android.mk
LOCAL_PATH := $(call my-dir)
#链接动态so库时,需要预编译才可以链接
include $(CLEAR_VARS)
LOCAL_MODULE := PicDetect
LOCAL_SRC_FILES := prebuilt/libPicDetect.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/prebuilt
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := picdetect-jni
LOCAL_SRC_FILES := org_hik_PicDetect.cpp
LOCAL_SHARED_LIBRARIES := libPicDetect
LOCAL_LDLIBS := -lc -lm -lstdc++ -llog
LOCAL_CPP_FEATURES += exceptions #NDK 编译器的 C++ 异常控制特性支持默认是关闭的,添加该行命令,便可以打开异常控制特性
include $(BUILD_SHARED_LIBRARY)
2.Application.mk
APP_OPTIM := release
APP_PLATFORM := android-9
APP_STL := c++_static
APP_CPPFLAGS += -fexceptions -std=c++11 -frtti
#APP_GNUSTL_FORCE_CPP_FEATURES := exceptions rtti
3.build.gradle
apply plugin: 'com.android.application'//生成apk
//apply plugin: 'com.android.library'//生成so和jar包,不生apk
android {
compileSdkVersion 25
buildToolsVersion '26.0.2'
defaultConfig {
applicationId "org.hik.picture" //生成apk时要指定应用id
minSdkVersion 21
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk{
moduleName "picdetect-jni" //lib的名称,对应LOCAL_MODULE
ldLibs "log", "z", "m" //链接时使用到的库,对应LOCAL_LDLIBS *注意ldLibs "log"一行,由于在test.c中#include "android/log.h",所以必须把log.h包含进来。
abiFilters "x86_64"//"x86_64"//"arm64-v8a"//"x86"//指定某种架构的CPU的so文件//"arm64-v8a","armeabi-v7a",
//cFlags 编译gcc的flag,对应LOCAL_CFLAGS
}
// externalNativeBuild {
// cmake {
// abiFilters 'arm64-v8a'//,'arm64-v8a'
// //abiFilters 'arm64-v8a'
// cppFlags "-frtti -fexceptions"
// }
// }
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets.main{
jni.srcDirs = []//disable automatic ndk-build call 屏蔽gradle自动生成Android.mk
jniLibs.srcDirs = ['libs']//这个脚本的意思是把app下的libs文件夹,当成原本/src/main下的jniLibs文件夹,这样就可以加载so库了。
}
externalNativeBuild{
ndkBuild{
path "src/main/jni/Android.mk"
}
}
// externalNativeBuild {
// cmake {
// path 'CMakeLists.txt'
// }
// }
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:25.2.0'
}