編輯:關於Android編程
我們知道,Android架構中上層應用是以java來編寫的,而底層則用C/C++編寫。一般而言,上層android工程師在開發過程中,不會或很少涉及到C/C++層,但項目中一旦涉及到復雜的算法或耗時操作時(例如圖像處理等),通常使用C/C++完成算法實現並提供給java層(通過JNI)調用,以此提升軟件的運行效率。在這個過程中,C/C++所實現的代碼以及JNI調用相關的代碼被打包為.so庫,這即是所謂的目錄設備上的二進制動態庫(SHARED LIBRARY),而且.so庫更安全,不容易被反編譯。那麼如何打包自己的.so庫呢?
一、在Android studio 中配置NDK
在電腦的環境變量中加入NDK的路徑
測試
成功!!!OK。
二、新建一個工程,先做一下配置
1、在app的build.gradl下加入
defaultConfig { applicationId "jni.svse.com.jnitest2" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" ndk{ moduleName "NDKDEMO" //生成的so名字 ldLibs "log", "z", "m" //鏈接時使用到的庫 abiFilters "armeabi", "armeabi-v7a", "x86" //輸出指定三種abi體系結構下的so庫。目前可有可無 } }
2、在gradle.properties裡添加
android.useDeprecatedNdk=true
3、在main下新建一個JNI文件夾
會生成jni文件夾
三、新建調用C/C++的類
public class Load { static { System.loadLibrary("NDKDEMO");//NDKDEMO可以隨便取,但是必須和moduleName "NDKDEMO" 的名字一樣 } public static native int Add(int a,int b); }
此時Add會出現紅色,不要緊,Alt+Enter,android studio會在jni下自動幫你生成NDKDEMO.c
#includeJNIEXPORT jint JNICALL Java_jni_svse_com_jnitest2_Load_Add(JNIEnv *env, jclass type, jint a, jint b) { // TODO在這裡編寫你的邏輯代碼 }
此時還沒有生成.so庫
<[> 以上2步後會在以下路徑生成你的.so庫了 生成的類型是根據以下紅色來的
ndk{ moduleName "NDKDEMO" //生成的so名字 ldLibs "log", "z", "m" //鏈接時使用到的庫 abiFilters "armeabi", "armeabi-v7a", "x86" //輸出指定三種abi體系結構下的so庫。目前可有可無 }
有了自己的.so庫怎麼使用呢
在新建一個工程,把.so庫放到jniLibs下,在工程下新建一個和.so庫包名一樣的Package,Java_jni_svse_com_jnitest2_Load_Add包名是jni.com.jnitest2,然後再把上面的Load 復制到這裡,在Activity裡就可以使用了
int value=Load.Add(23, 5);
Android 吸入動畫效果詳解 . 這裡,我要介紹的是如何在Android上面實現一個類似的效果。先看看我實現的效果圖。 上圖演示了動畫的某幾幀
知識點目錄 5.1 滑動效果是如何產生的 5.1.1 Android坐標系 5.1.2 視圖坐標系 5.1.3 觸控事件——MotionEvent
在android開發中對圖片處理很是頻繁,其中對圖片的顏色處理就是很常見的一種。我們經常看到一些類似美圖秀秀,美顏相機的app,為什麼那麼黑的人拍出來是確實那麼地白呢?長
廢話不多說,先上效果圖在下載的時候藍色的邊會跟著下載的進度以前變化--思路:大概的思路就是在這張圖片上蓋上一層視圖,視圖裡面有畫兩個圓,內圓是顯示加載進度的,顯示的顏色是