編輯:關於Android編程
public class MainActivity extends Activity{ static { System.loadLibrary("JniTest"); } public native String getStringFromNative(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView txtView = (TextView) findViewById(R.id.txt); txtView.setText(getStringFromNative()); } }
Step: 3.javah生成c頭文件<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD6147v3"View->Tool Windows->Terminal",即在Studio中進行終端命令行工具.執行如下命令生成c語言頭文件。這裡需要注意的是要進入
操作命令:javah -d jni -classpath
javah -d jni -classpath c:\Users\sodinochen\AppData\Local\Android\sdk\platforms \android-16\android.jar;..\..\build\intermediates\classes\debug lab.sodino.jnitest.MainActivity
最後的生成結果:
Step: 4.編輯c文件
在main.c文件中實現頭文件中的方法,具體功能為直接return回一個String,並且使用android_log打印出相關日志。代碼如下:/* DO NOT EDIT THIS FILE - it is machine generated */ #include#include #ifndef LOG_TAG #define LOG_TAG "ANDROID_LAB" #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) #endif /* Header for class lab_sodino_jnitest_MainActivity */ #ifndef _Included_lab_sodino_jnitest_MainActivity #define _Included_lab_sodino_jnitest_MainActivity #ifdef __cplusplus extern "C" { #endif /* * Class: lab_sodino_jnitest_MainActivity * Method: getStringFromNative * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_lab_sodino_jnitest_MainActivity_getStringFromNative (JNIEnv * env, jobject jObj){ LOGE("log string from ndk."); return (*env)->NewStringUTF(env,"Hello From JNI!"); } #ifdef __cplusplus } #endif #endif
Error:Execution failed for task ':app:compileDebugNdk'. > NDK not configured. Download the NDK from http://developer.android.com/tools/sdk/ndk/.Then add ndk.dir=path/to/ndk in local.properties. (On Windows, make sure you escape backslashes, e.g. C:\\ndk rather than C:\ndk)這裡提示了NDK未配置,並且需要在工程中的local.properties文件中配置NDK路徑。好了,提示很清楚了,那我們就進入下一步吧。
ndk { moduleName "JniTest" ldLibs "log", "z", "m" abiFilters "armeabi", "armeabi-v7a", "x86" }以上配置代碼指定的so庫名稱為JniTest,鏈接時使用到的庫,對應android.mk文件中的LOCAL_LDLIBS,及最終輸出指定三種abi體系結構下的so庫。添加後如下圖:
Error:Execution failed for task ':app:compileDebugNdk'. > com.android.ide.common.internal.LoggedErrorException: Failed to run command: D:\Mission\adt-bundle-windows\ndk-r10b\ndk-build.cmd NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=C:\Users\sodinochen\AndroidstudioProjects\JniTest2\app\build\intermediates\ndk\debug\Android.mk APP_PLATFORM=android-21 NDK_OUT=C:\Users\sodinochen\AndroidstudioProjects\JniTest2\app\build\intermediates\ndk\debug\obj NDK_LIBS_OUT=C:\Users\sodinochen\AndroidstudioProjects\JniTest2\app\build\intermediates\ndk\debug\lib APP_ABI=armeabi,armeabi-v7a,x86 Error Code: 2 Output: make.exe: *** No rule to make target `C:\Users\sodinochen\AndroidstudioProjects\JniTest2\app\build\intermediates\ndk\debug\obj/local/armeabi/objs/JniTest/C_\Users\sodinochen\AndroidstudioProjects\JniTest2\app\src\main\jni', needed by `C:\Users\sodinochen\AndroidstudioProjects\JniTest2\app\build\intermediates\ndk\debug\obj/local/armeabi/objs/JniTest/C_\Users\sodinochen\AndroidstudioProjects\JniTest2\app\src\main\jni\main.o'. Stop.出現這個錯誤很莫名其妙..幾番折騰下,找到一個視頻出來了大概原因及解決方式:出處見Youtube視頻 02:50分開始:https://www.youtube.com/watch?v=okLKfxfbz40#t=362在Windows下NDK一個bug,當僅僅編譯一個文件時出現會出現此問題,解決方法就是再加入一個空util.c文件即可。編譯出來的庫文件被Studio輸出到了下圖的路徑中
Step: 6.安裝運行
界面:查看Log打印:
本文實例講述了Android編程實現調用系統圖庫與裁剪圖片功能。分享給大家供大家參考,具體如下:在Android開發中,調用系統圖庫和裁剪照片是很常見的需求。相對於自己實
Activities提供了一種方便管理的創建、保存、回復的對話框機制,例如 onCreateDialog(int), onPrepareDialog(int, Dialo
博主曾經對netty4的helloword很感興趣,也曾單純的寫過一個小小的聊天室java代碼,現在重新來看看,浏覽了這位牛人的博客 點擊去看看 我覺得受益匪淺,故拿來分
前言研究了一段時間的藍牙使用,發現網上相關的資料比較貧乏,不像其他Android相關資料那麼齊全,基本上大部分資料都是在藍牙聯盟SIG提供的官網https://www.b