android studio2.3.2增加jni之自定义Android.mk

基于前面一篇android studio增加jni https://my.oschina.net/hclydao/blog/1555612

现在在增加自定义Android.mk,在网上也找了一些,这里记录下比较简单的方法

在前一篇的基础上注释掉build.gradle和gradle.properties的修改,然后修改app的build.gradle增加如下内容

    sourceSets {
        main {
            jni.srcDirs = []
            jniLibs.srcDirs 'src/main/libs'
        }
    }
    task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
        commandLine "/dao/ubapp/androidsdk/android-ndk-r10e/ndk-build",
                'NDK_PROJECT_PATH=build/intermediates/ndk',
                'NDK_LIBS_OUT=src/main/libs',
                'APP_BUILD_SCRIPT=src/main/jni/Android.mk',
                'NDK_APPLICATION_MK=src/main/jni/Application.mk'
    }

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn ndkBuild
    }

    android.applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def file = output.outputFile
            output.outputFile = new File(file.parent, defaultConfig.applicationId + "-" +
                    buildType.name + "-Ver" + defaultConfig.versionName + ".apk")
        }
    }

其中souceSets中jni.srcDirs这个一定要有,经过测试这个如果没有有可能会报错,

实际测试在有的环境中这样改编译不过,另一种可以,就是把上面的

    sourceSets {
        main {
            jni.srcDirs = []
            jniLibs.srcDirs 'src/main/libs'
        }
    }

不加,然后在android中增加如下:

android {
    compileSdkVersion 26
    buildToolsVersion "27.0.3"
    //使用Android Lib生成release jar需要
    publishNonDefault true
    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        /*
        ndk {
            moduleName "Hardware"
        }*/
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets.main.jni.srcDirs = [] //禁用自带编译ndk功能
    sourceSets.main.jniLibs.srcDir 'src/main/libs'
}

task ndkBuild中commandLine后为ndk下的ndk-build的绝对路径

NDK_PROJECT_PATH

这个内容是通用的可以不用改

NDK_LIBS_OUT

这是设置生成的库文件存放的路径,一般也是通用的

APP_BUILD_SCRIPT
NDK_APPLICATION_MK

分别是指定Android.mk路径和Application.mk路径

然后下面的

android.applicationVariants.all

这个是用来重命名生成的apk的名字的.

附上我的mk文件
Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := Hardware
LOCAL_SRC_FILES := Hardware.c
LOCAL_LDLIBS    := -llog
include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_ABI := armeabi

============================================
作者:hclydao
https://my.oschina.net/hclydao/blog
版权没有,但是转载请保留此段声明

============================================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值