在Android studio IDE中采用自己编写的Android.mk

本文介绍了如何在Android Studio项目中创建jni目录,并编写Android.mk和Application.mk文件来自定义构建过程。通过实例展示了具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在app/src/main/ 新建jni文件夹


/app/src/main/jni


在里面创建一个.cc文件,编写Android.mk  Application.mk

本人的实例如下:

Android.mk


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := HellJni
LOCAL_SRC_FILES := HelloJni.cpp

include $(BUILD_SHARED_LIBRARY)

Application.mk
APP_STL := gnustl_static
APP_ABI := armeabi armeabi-v7a

接下来是build.gradle 这个文件是在工程的顶层目录下的,与settings.gradle 文件在同一个目录下
我这边的修改如下:
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.7.0-rc1'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
上面标记红色 地方是我修改的地方,
之后到app目录下,修改此目录下的build.gradle
具体如下:
import org.apache.tools.ant.taskdefs.condition.Os

apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.2"

        defaultConfig {
            applicationId "com.example.administrator.myjni"
            minSdkVersion.apiLevel = 15
            targetSdkVersion.apiLevel = 23
            versionCode = 1
            versionName = "1.0"
            ndk{
                moduleName = 'HelloJni'
            }
        }

 //       ndk{
 //           moduleName = "HelloJni"
 //           stl = 'gnustl_static'
 //           cppFlags.addAll(['-std=c++11'])
 //           ldLibs.addAll(['android', 'log'])
 //           abiFilters.addAll(['armeabi', 'armeabi-v7a'])
 //       }

        sources{
            main{
                jni{
                    source{
                        srcDirs = []
                    }
                }
                jniLibs{
                    source{
                        srcDir 'src/main/libs'
                    }
                }
            }
        }

        task ndkBuild(type: Exec) {
            if (Os.isFamily(Os.FAMILY_WINDOWS)) {
                commandLine 'E:\\Android_SDKS\\ndk-bundle\\ndk-build.cmd', '-C', file('src/main').absolutePath
            }
            else{
                commandLine 'ndk-build', '-C', file('src/main').absolutePath
            }
        }

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

        buildTypes {
            release {
                minifyEnabled false
                proguardFiles.add(file('proguard-android.txt'))
            }
        }
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
}
标记为蓝色的部分,是需要同时设置的
标记为紫黑色的部分,是需要特别注意的,否则会出现错误:  "  A problem occurred starting process 'command 'ndk-build.cmd''  "
紫黑色部分标记的是本人的ndk包安装的地方

标记为紫红色的部分是Android studio按照动态生成的Android.mk文件进行编译的方式

以上就是自己写的一个简单的jni 测试,采用自己写的Android.mk

当然采用自己的写的Android.mk 有优点,特别是已经有Android.mk的工程,直接导入进来就好了,但是也有其缺点,如果是一个linux工程文件,只有Makefile文件,这时则需要
自己去编写Android.mk文件,对于Android的编译系统了解不是很深的,估计很难写出来






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值