studio编译java文件_安卓studio编译mk项目文件C++代码配置理解

锐英源精品开源,禁止转载和任何形式的非法内容使用,违者必究

安卓studio编译mk项目文件C++代码配置理解

近期开发安卓下输入法,用例子编译出来个APK,安装后,执行出“抱歉,运行停止”,在英文界面下提示“sorry ,has stopped”,通过android studio的输出窗口看到如下信息:

a86186f21ae1c854e8c977183f753bd2.png

dba899cf8ee1a8b1a387380e5d414e26.png

FATAL EXCEPTION:main

Unable to instantiate service java.lang.ClassNotFoundException:Didn’t find class

经过我们团队分析,这是少了jni对应的so文件造成的,要生成so文件就要研究jni环境下的mk文件的编译问题,就要研究build.gradle进行定制编译。

下面内容要配置到build.gradle文件内

sourceSets {//指定一个特别的代码集处理机制,

main {//约束main目录的处理,

jni.srcDirs = []//指定没有jni目录,进而禁止gradle生成Android.mk

jniLibs.srcDirs = ['src/main/jniLibs']//指定jniLibs目录,进而设置目标的so存放路径

}

}

tasks.withType(JavaCompile) {//建立根编译任务,依赖后面3个任务

compileTask -> compileTask.dependsOn 'ndkBuild','copyThirdso', 'copyJniLibs'

}

}

task ndkBuild(type: Exec) {//执行任务,执行ndk编译,拷贝so到新的so的生成目录

def ndkBuildingDir = project.plugins.findPlugin('com.android.application').sdkHandler.getNdkFolder().absolutePath

commandLine ndkBuildingDir + "/ndk-build.cmd", '-C', 'src/main/jni',

"NDK_OUT=$buildDir/intermediates/ndk/obj",

"NDK_APP_DST_DIR=$buildDir/intermediates/ndk/libs/\$(TARGET_ARCH_ABI)"

}

task copyJniLibs(type: Copy) {//将新生成的so拷贝到jniLibs目录

from fileTree(dir: file(buildDir.absolutePath + '/intermediates/ndk/libs'), include: '**/*.so')

into file('src/main/jniLibs')

}

task copyThirdso(type: Copy) {//将第三方的so拷贝到jniLibs目录,vvw是第三方

from file('src/main/jni/vvw/libs')

into file('src/main/jniLibs')

}

dependencies {//指定依赖

compile fileTree(dir: 'libs', include: ['*.jar'])

testCompile 'junit:junit:4.12'

compile 'com.android.support:appcompat-v7:23.1.1'

compile 'com.android.support:design:23.1.1'

}

//compile表示编译和运行时候需要的jar包,fileTree是一个函数,

//dir:'libs',表示搜索目录的名称是libs。include:['*.jar'],表示搜索目录下满足*.jar名字的jar

//包都作为依赖jar文件

如果手工编译,要安装ndk,也很麻烦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值