編輯:關於Android編程
本例實現一個簡單的場景:
1、使用C編寫一個方法,接收1個參數,方法中調用Java的方法。
2、Java類中編寫一個方法,接收一個參數。
3、模擬調用場景:點擊按鈕 -> 調用C方法 -> C調用Java方法 -> 獲得返回值 -> Toast提示。
項目結構圖:

代碼如下:
CcallJava.java
package com.shanhy.example.ccalljava;
/**
* C調用Java的方法
*
* @author SHANHY(365384722@QQ.COM)
* @date 2015年11月20日
*/
public class CcallJava {
public String testCall(String str){
return 大家好! + str;
}
}
MainActivity.java
package com.shanhy.example.ccalljava;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
/**
* 加密 NDK 開發
*
* @author SHANHY(365384722@QQ.COM)
* @date 2015年11月19日
*/
public class MainActivity extends Activity {
// 也就是你mk配置文件中的 LOCAL_MODULE
private static final String libSoName = shanhyNdk;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
/**
* 綁定給布局文件的onClick方法
*
* @param v
* @author SHANHY
* @date 2015年11月20日
*/
public void testCcallJava(View v) {
LogUtils.toastMessage(MainActivity.this, stringFromJNI(我叫返回值,我被C調用了 ^_^));
}
/**
* 聲明本地方法
*
* 該方法為native方法.由C實現
*
* @return JNI 給出的信息
*/
public native String stringFromJNI(String strText);
/**
* 載入JNI生成的so庫文件
*/
static {
System.loadLibrary(libSoName);
}
}
Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := shanhyNdk LOCAL_SRC_FILES := shanhyNdk.cpp myJNI.h include $(BUILD_SHARED_LIBRARY)
myJNI.h
#include#ifndef _Included_com_shanhy_example_MainActivity #define _Included_com_shanhy_example_MainActivity #ifdef __cplusplus extern C { #endif JNIEXPORT jstring JNICALL Java_com_shanhy_example_ccalljava_MainActivity_stringFromJNI(JNIEnv *, jobject, jstring strText); #ifdef __cplusplus } #endif #endif
shanhyNdk.cpp
#include myJNI.h
jobject getInstance(JNIEnv* env, jclass obj_class){
jmethodID construction_id = env->GetMethodID(obj_class, , ()V);
jobject obj = env->NewObject(obj_class, construction_id);
return obj;
}
JNIEXPORT jstring JNICALL Java_com_shanhy_example_ccalljava_MainActivity_stringFromJNI(JNIEnv* env, jobject thiz, jstring strText){
jstring str;
jclass java_class = env->FindClass(com/shanhy/example/ccalljava/CcallJava);
if (java_class == 0){
return env->NewStringUTF(not find class!);
}
jobject java_obj = getInstance(env, java_class);
if (java_obj == 0){
return env->NewStringUTF(not find java OBJ!);
}
jmethodID java_method = env->GetMethodID(java_class, testCall, (Ljava/lang/String;)Ljava/lang/String;);
if(java_method == 0){
return env->NewStringUTF(not find java method!);
}
str = (jstring)env->CallObjectMethod(java_obj, java_method, strText);
return str;
}
Android actionBar與Fragment結合使用Demo2
上一篇文章介紹了ActionBar的使用,這裡介紹ActionBar的另一種使用方法,達到的效果和以前的GroupActivity或TabHost是一樣的,可作為導航來使
小米4S手機用什麼SIM卡 小米手機4S用什麼電話卡
小米4S手機用什麼SIM卡?小米4S已經發布了,那麼有想購買意願的用戶也想知道小米4S用的是什麼電話卡,還有需不需要剪卡之類的,這裡小編來給大家介紹一下小米
android 開發零起步學習筆記(九):android 控制控件的位置和大小及Layout相關屬性
方法一:Android的界面布局可以用兩種方法,一種是在xml中布局,一種是和JAVA中Swing一樣在JAVA代碼中實現Ui界面的布局,用xml的布局管理器布局是很方便
Android實現隱藏狀態欄和標題欄
隱藏標題欄需要使用預定義樣式:android:theme=”@android:style/Theme.NoTitleBar”. 隱藏狀態欄:android:theme=”