參考鏈接:Android 使用NDK編譯二進制文件并運行
http://blog.csdn.net/u014088294/article/details/49924967
首先,新建jni文件夾。

然后,編寫.c和.mk文件。

.c文件具體如下
#include <stdio.h>
intcount = 0;
void sevenWeapons(int number)
{
char* str ="Hello,11111111!";
printf("%s %d\n",str,number);
}
int main()
{
while(1)
{
sevenWeapons(count);
count++;
sleep(1);
}
return 0;
}
mk文件如下所示。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := target
LOCAL_SRC_FILES := target.c
include $(BUILD_EXECUTABLE)
可以用編譯命令生成,也可以使用gradle去生成。
android ndk編譯命令
http://m.itdecent.cn/p/3eb1539fdcdc
這里由于我不知道怎么配置生成所以的平臺的target文件,所以還是用的gradle去生成可執(zhí)行文件。

配置gradle。其實這個配置和生成so文件的配置是一樣的。
sourceSets.main{
jni.srcDirs = []
jniLibs.srcDirs = ['src/main/jniLibs']//設置目標的存放路徑
}
task ndkBuild(type:Exec,description:'Compile JNI source via NDK'){
commandLine"C:\\Users\\lei\\AppData\\Local\\Android\\Sdk\\ndk-bundle\\ndk-build.cmd",
//配置ndk的路徑
'NDK_PROJECT_PATH=build/intermediates/ndk',
//ndk默認的生成文件
'NDK_LIBS_OUT=src/main/jniLibs',
//配置的我們想要生成的文件所在的位置
'APP_BUILD_SCRIPT=src/main/jni/Android.mk'
//指定項目以這個mk的方式
}
tasks.withType(JavaCompile){
//使用ndkBuild
compileTask ->compileTask.dependsOn ndkBuild
}
整體配置如下:
android {
compileSdkVersion 26
buildToolsVersion "26.0.1"
defaultConfig {
applicationId "com.demo.mkdemo"
minSdkVersion 19
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
sourceSets.main{
jni.srcDirs = []
jniLibs.srcDirs = ['src/main/jniLibs']//設置目標的so存放路徑
}
task ndkBuild(type:Exec,description:'Compile JNI source via NDK'){
commandLine"C:\\Users\\lei\\AppData\\Local\\Android\\Sdk\\ndk-bundle\\ndk-build.cmd",
//配置ndk的路徑
'NDK_PROJECT_PATH=build/intermediates/ndk',
//ndk默認的生成文件
'NDK_LIBS_OUT=src/main/jniLibs',
//配置的我們想要生成的so文件所在的位置
'APP_BUILD_SCRIPT=src/main/jni/Android.mk'
//指定項目以這個mk的方式
}
tasks.withType(JavaCompile){
//使用ndkBuild
compileTask ->compileTask.dependsOn ndkBuild
}
}
dependencies {
compile fileTree(dir:'libs',include: ['*.jar'])
.......
}
將這個push到android設備中。
先將target文件copy至adb所在目錄下,即C:\Users\lei。

將生成的二進制文件push到android設備中。
adb push target /data/local/tmp
注意,Android的有些目錄是無法執(zhí)行二進制文件的,所以一般放在/data/local/tmp目錄中。
執(zhí)行二進制文件
C:\Users\lei>adb shell
root@rk3188:/ # cd /data/local/tmp
//賦予權限
root@rk3188:/data/local/tmp # chmod 751 target
//? ?./target執(zhí)行二進制文件
root@rk3188:/data/local/tmp # ./target
結果如下:

成功執(zhí)行了。