編輯:關於Android編程
NDK全稱是Native Development Kit,NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,並能自動將so和java應用一起打包成apk。NDK集成了交叉編譯器(交叉編譯器需要UNIX或LINUX系統環境),並提供了相應的mk文件隔離CPU、平台、ABI等差異,開發人員只需要簡單修改mk文件(指出“哪些文件需要編譯”、“編譯特性要求”等),就可以創建出so。
1、代碼的保護。由於apk的java層代碼很容易被反編譯,而C/C++庫反匯難度較大。
2、可以方便地使用現存的開源庫。大部分現存的開源庫都是用C/C++代碼編寫的。
3、提高程序的執行效率。將要求高性能的應用邏輯使用C開發,從而提高應用程序的執行效率。
4、便於移植。用C/C++寫得庫可以方便在其他的嵌入式平台上再次使用。
JNI的全稱是Java Native Interface,它提供了若干的API實現了Java和其他語言的通信(主要是C和C++)。
JNI的目的是使java方法能夠調用c實現的一些函數。
android中用到的so文件是一個c++的函數庫。在android的JNI中,要先將相應的C語言打包成so庫,然後導入到lib文件夾中供java調用。
然後點擊OK。
在activity中(或者寫一個類)新建如下:
這時候,方法名是紅色的,報紅是因為還沒有生成so文件,沒有通過so文件調用。(可以看到這個方法的聲明中有native關鍵字,這個關鍵字表示這個方法是本地方法,也就是說這個方法getStrFromJNI()是通過本地代碼(C/C++)實現的,在java代碼中僅僅是聲明。)
studio的Terminal窗口下,進入到該工程的java目錄下(如下圖所示),然後輸入javah -jni 包名.類名,如下:
然後Enter,會生成相應的.h文件,如下。(如果有多個類中新建了本地native方法,就分別重復以上操作,就會生成多個.h文件吧)
該文件只是為了輔助我們寫出相應的.c文件,使用完了即可刪除。文件內容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class com_example_administrator_ndkdemo_MainActivity */
#ifndef _Included_com_example_administrator_ndkdemo_MainActivity
#define _Included_com_example_administrator_ndkdemo_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_administrator_ndkdemo_MainActivity
* Method: getStringFromNative
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_administrator_ndkdemo_MainActivity_getStringFromNative
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
有用的就是
仔細觀察可以看到他是遵循“Java_包名類名本地方法名”來組織的(了解到這些後我們以後就可以不生成.h文件然後直接去寫.c文件了)。
在jni下新建.c文件,在裡面寫方法,如下:
編輯Android.mk代碼:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := demo //要生成的so庫的名稱,但實際為libdemo.so
LOCAL_SRC_FILES := demo.c //要使用的文件,剛才編寫的demo.c文件
include $(BUILD_SHARED_LIBRARY)
在studio控制台中,進入到工程的main(或者是app)目錄下(就是jni所在目錄的上一級),然後輸入ndk-build(如下所示),不出問題即可編譯成功。
或者進入cmd中操作是一樣的。
編譯完成後刷新工程,可以看到在app目錄下生成的libs和obj文件夾,其中libs是有用的,obj文件夾無用可以刪除。libs中的可以看到生成的libdemo.so文件。
1、在app的build.gradle的android節點下設置:
2、jni下新建空的.c文件
3、gradle.properities中添加代碼如下:
最後點擊運行ok
Viewpager實現帶下面帶圓點的過渡頁,先來效果圖實現這個功能需要幾個步驟,如下 1、布局用的是FrameLayout,需要了解的可以在網上百度。簡單來說就是,他會前
一、安裝目錄分析 最近在做手機項目時,涉及很多本地文件管理方面的內容,比如用戶的頭像、下載的圖片、視頻等等,將這些文件緩存在本地,必須設計一個合理的組織方式
UI的畫圖流程中,先不管怎麼填充要畫的數據的,只是來看一下需要畫到屏幕上的數據是通過怎樣的流程最終傳遞到屏幕上的。這個流程都是UI獲取並創建Surface並利用Cavan
在Android系統API中,有兩個Camera類: android.graphics.Camera android.hardware.Camera 第二個應用於