本编译环境在 androidstudio2.0 以上。
一下为build.gride文件
android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "hohistar.msales.myapplication" minSdkVersion 14 targetSdkVersion 22 versionCode 1 versionName "1.0" multiDexEnabled true //解决AS中NDK插件过期时不能编译的问题 ndk { // moduleName "DBHelper" moduleName "CipherUtils"// jni库名字和链接c++文件名称一致 stl "gnustl_static" // stlport_static abiFilters "armeabi", "armeabi-v7a" ldLibs "log", "android"//申明引用系统库 } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } //加载so库目录 sourceSets { main { jniLibs.srcDirs = ['libs'] } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:22.2.1' compile files('libs/DBHelper.jar') }
local.properties文件 添加NDK 路径
ndk.dir=/Users/sinde/Documents/android/adt-bundle-mac-x86_64-20130717/sdk/ndk-bundle sdk.dir=/Users/sinde/Documents/android/adt-bundle-mac-x86_64-20130717/sdk
目前androidstudio 版本 只支持编译NDK,还未发现可以进行c++代码提示,写起来也有点麻烦
目前创建c++链接文件的方法为
1.terminal终端 cd 进入项目java目录下如 sindedeMacBook-Pro:MyApplication sinde$ cd app/src/main/java/
2.新建链接文件 sindedeMacBook-Pro:java sinde$ javah -d ../jni hohistar.msales.myapplication.CipherUtils(也可手动创建,但要和
moduleName 保持一致
)
3.在java中直接引用即可
System.loadLibrary("CipherUtils");
总结:在运行的时候可能会报链接不到第三方的so库,手动删一下jni文件夹,然后在注释
moduleName "CipherUtils"// jni库名字和链接c++文件名称一致再次编译运行,第三方的so库就没出错了,然后在把jni文件夹拷贝进来,把moduleNmae 放开注释,在次编译运行就没报错了(我怀疑是编译器编译有问题导致找不到第三方so库)