处理器:x86,arm,mips
在src/main目录下创建一个文件夹jni,在文件夹下创建一个C文件Hello.c
//
// Created by Administrator on 2016/8/30.
//
#include<stdio.h>
#include<stdlib.h>
#include<jni.h>
#include "string.h"
//Java+包名+类名+方法名
jstring Java_com_yang_yin_yinyangapplication_MainActivity_stringFromJNI(JNIEnv* env,jobject obj){
// char arr[] = "heello from c";
//c语言的字符串
char *cstr= "hello from c";
//把C语言的字符串转换为java字符串
jstring jstr = (*env)->NewStringUTF(env,cstr);
//jstring jstr = (*(*env)).NewStringUTF(env,cstr);
//com.yang.yin.yinyangapplication
return jstr;
}
再看Activity类中调用
public class MainActivity extends Activity {
static {
System.loadLibrary("hello");
}
@Bind(R.id.textView)
TextView textView;
@Bind(R.id.button)
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
@OnClick(R.id.button)
public void onClick() {
textView.setText(stringFromJNI());
}
//定义一个本地方法,方法体由c语言实现
public native String stringFromJNI();
}
make一下工程就会生成相应的so文件
相关配置~
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.yang.yin.yinyangapplication"
minSdkVersion 10
targetSdkVersion 23
versionCode 1
versionName "1.0"
ndk{
moduleName "hello"//生成so的库文件名
ldLibs "log","z","m"
abiFilters "armeabi","x86","armeabi-v7a"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.jakewharton:butterknife:7.0.0'
}
效果
点击后~
终于可以用C写android了是不是很兴奋~