android的Android.mk,Application.mk以及build.gradle的编写

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'


}

猜你喜欢

转载自blog.csdn.net/pkx1993/article/details/81163172