編輯:關於Android編程
說在前面的話:這篇文章是看了如何優雅地使用NDK後,對原博客功能的補充。為了方便大家的閱讀順序,直接添加到原博客之中,如有侵犯版權,請聯系我。這篇博客有轉載,有原創,只是在原博客上做了修改,故分類到原創,如有不對,請大家留言指正。
本博客轉載地址如下:
如何優雅地使用NDK
在Android Studio上使用了一段時間的NDK,感覺官方的插件com.android.tools.build.gradle-experimental還是不夠穩定,存在一定問題,不過谷歌也聲明了這個插件是在實驗性階段。幸好官方在Android Studio上提供了另一種方式使用NDK,這篇博客就講講這種到目前為止我覺得非常贊的方法。
NDK開發比較常用的命令就是生成頭文件、構建so包,在android studio上我們可以先配置好命令,使用起來就很方便了,這是我感覺最贊的地方。
如下圖所示,我添加了三個命令,按加號添加
其中一個命令的配置詳情如下圖:
命令配置參數:
javah用於生成頭文件
Program:$JDKPath$/bin/javah
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KCjxwPlBhcmFtZXRlcnM6IDxjb2RlPi1lbmNvZGluZyBVVEYtOCAtZCAuLi9qbmkgLWpuaSAkRmlsZUNsYXNzJDwvY29kZT48L3A+Cgo8cD7XotLio7rV4rj2w/zB7s7SvNPJz8HLLWVuY29kaW5nIFVURi041ri2qLHgwuujrMTjv8nS1LjEs8nE47mks8y1xLHgwuuhozwvcD4KCjxwPldvcmtpbmcgZGlyZWN0b3J5OiA8Y29kZT4kU291cmNlcGF0aEVudHJ5JFwuLlxqYXZhPC9jb2RlPjwvcD4KCjxwPm5kay1idWlsZNPD09q5ub2oc2+w/DwvcD4KCjxwPlByb2dyYW06IDxjb2RlPsTjtcROREvEv8K8XGJ1aWxkXG5kay1idWlsZC5jbWQ8L2NvZGU+PC9wPgoKPHA+16LS4qO6d2luZG93c9PDPGNvZGU+bmRrLWJ1aWxkLmNtZDwvY29kZT4sTUFDL0xpbnV408M8Y29kZT5uZGstYnVpbGQ8L2NvZGU+PC9wPgoKPHA+UGFyYW1ldGVyczogyrLDtLa8srvTw8zuPC9wPgoKPHA+V29ya2luZyBkaXJlY3Rvcnk6PGNvZGU+JE1vZHVsZUZpbGVEaXIkXHNyY1xtYWluPC9jb2RlPjwvcD4KCjxwPm5kay1idWlsZCBjbGVhbsfls/1zb7D8PC9wPgoKPHA+UHJvZ3JhbTogPGNvZGU+xOO1xE5ES8S/wrxcYnVpbGRcbmRrLWJ1aWxkLmNtZDwvY29kZT48L3A+Cgo8cD7XotLio7p3aW5kb3dz08M8Y29kZT5uZGstYnVpbGQuY21kPC9jb2RlPixNQUMvTGludXjTwzxjb2RlPm5kay1idWlsZDwvY29kZT48L3A+Cgo8cD5QYXJhbWV0ZXJzOiBjbGVhbjwvcD4KCjxwPldvcmtpbmcgZGlyZWN0b3J5Ojxjb2RlPiRNb2R1bGVGaWxlRGlyJFxzcmNcbWFpbjwvY29kZT48L3A+Cgo8cD48c3Ryb25nPj09PT09PT09PT3V4sDv1K2yqb/Nw7vT0KOssrmz5L+qyrw9PT09PT09PT09PC9zdHJvbmc+IDxicj4KPHN0cm9uZz5tYWtlZmlsZSDTw9PayfqzyWFuZHJvaWQubWu6zWFwcGxpY2F0aW9uLm1rPC9zdHJvbmc+IDxicj4KPHN0cm9uZz7S1Lywz/JncmFkbGUucHJvcGVydGllc7rNbG9jYWwucHJvcGVydGllc87EvP7W0MztvNO1xLnMtqjF5NbDPC9zdHJvbmc+PC9wPgoKPHA+PGltZyBzcmM9"/uploadfile/Collfiles/20160509/20160509091228228.png" alt="這裡寫圖片描述" title="\">
Program: 你的NDK目錄\makefile.cmd
注意:makefile.cmd源碼如下,請自行放到對應上面的目錄
Parameters: $FileName$ $ProjectFileDir$
Working directory: $FileDir$
makefile.cmd源代碼如下:
@echo off
rem 參數1無需手動傳入,右鍵執行makefile命令即可
rem c/c++源文件名(帶後綴名)
set Paramter1=%1
rem 參數2項目所在目錄
set Paramter2=%2
set Dot=%Paramter1:~-2,-1%
rem 自動判斷c/c++文件,生成相應參數
if "."=="%Dot%" (
set FileName=%Paramter1:~0,-2%
) else (
set FileName=%Paramter1:~0,-4%
)
rem Android.mk文件中參數
echo LOCAL_PATH := $(call my-dir)> Android.mk
echo include $(CLEAR_VARS)>> Android.mk
echo. >> Android.mk
echo LOCAL_MODULE := %FileName%>> Android.mk
echo |set /p=LOCAL_SRC_FILES :=>> Android.mk
rem 遍歷當前文件夾下所有c/c++源文件
FOR /R %%i in ( *.c *.cpp ) do (
echo |set /p= %%~nxi>> Android.mk
)
echo.>> Android.mk
echo include $(BUILD_SHARED_LIBRARY)>> Android.mk
rem Application.mk文件中參數
echo APP_MODULES := %FileName%> Application.mk
echo. >> Application.mk
echo APP_ABI := all >> Application.mk
rem gradle.properties中追加配置
echo.>> %Paramter2%/gradle.properties
echo android.useDeprecatedNdk=true>> %Paramter2%/gradle.properties
rem local.properties中追加配置
echo.>> %Paramter2%/local.properties
rem 注意:D\:\\DevelopKit\\android-ndk-r10e 這個改成自己的NDK所在目錄
echo ndk.dir=D\:\\DevelopKit\\android-ndk-r10e>> %Paramter2%/local.properties
注意:D:\DevelopKit\android-ndk-r10e 這個改成自己的NDK所在目錄,其他的就不用改了
命令使用說明:
javah命令:在包含native方法的類上執行,會生成對應該類的頭文件,如果有多個包含native方法的類,對應執行一次
makefile命令:點擊希望成為模塊的c/c++源文件,以此源文件的文件名為模塊,對應Android.mk中的LOCAL_MODULE和
Application.mk中的APP_MODULES,LOCAL_SRC_FILES後面的參數會根據jni目錄下的c/c++源文件全部羅列上去。
參考下圖理解
補充這些可以不用配置
Android.mk
自動生成,可以修改其中的配置
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.cpp hello-jni2.cpp
include $(BUILD_SHARED_LIBRARY)
Application.mk
自動生成,可以修改其中的配置
APP_MODULES := hello-jni
APP_ABI := all
local.properties 自動添加固定配置
ndk.dir=你的NDK目錄的絕對路徑
如 D:\DevelopKit\android-ndk-r10e 這是我的NDK目錄
gradle.properties 自動添加固定配置
android.useDeprecatedNdk = true
直接改好上面makefile.cmd(這個文件是用dos命令行編寫的)中對應自己的配置就可以了。是不是又讓你減少點體力?希望如此吧,嘿嘿…
對於我添加的這段補充,有什麼不懂得可以問我,博客的配置流程,我也親自試用了,為大神點贊,特別好用,推薦大家看看哦。
==========這裡原博客沒有,補充結束==========
配置完三個命令之後,你就可以在右鍵菜單中找到這幾個命令,可以直接使用。如下圖演示了生成NdkTest類的頭文件
配置工程
讓工程項目使用NDK,需要做一些配置工作
在local.properties文件中填寫使用的NDK
ndk.dir=你的NDK目錄的絕對路徑
gradle.properties文件中添加如下代碼
android.useDeprecatedNdk = true
在module的build.gradle添加如下代碼:
android {
{ ndk
{
moduleName "NdkTest"//定義NDKlibrary的名字
//ldLibs "log" 添加log庫,看自己需求
}
}
//這裡設置目錄,默認就這樣寫就可以了
sourceSets {
main {
jni.srcDir "src/main/jni"
jniLibs.srcDir "src/main/libs"
}
}
}
Hello word
按上面的步驟全都配置完之後就可以在Android Studio上享受NDK了。
下面寫一個簡單的返回Hello word字符串的程序。
首先在java中聲明一個本地方法,並加載本地庫,如下:
public class NdkTest
{
static {
System.loadLibrary("NdkTest");
}
public static native String getString();
}
生成它的頭文件(自動生成的名字是包名+類名me_majiajie_ndktest_NdkTest.h),並且創建c/c++文件(NdkTest.cpp),如下:
#include "me_majiajie_ndktest_NdkTest.h"
JNIEXPORT jstring JNICALL Java_me_majiajie_ndktest_NdkTest_getString
(JNIEnv *env, jclass jc)
{
return env->NewStringUTF("Hello word !!!");
}
在jni目錄創建一個文件命名為Android.mk,填入以下內容
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NdkTest
LOCAL_SRC_FILES := NdkTest.cpp
include $(BUILD_SHARED_LIBRARY)
然後在jni目錄創建一個文件命名為Application.mk,填入以下內容
APP_MODULES := NdkTest
APP_ABI := all
注意:Android.mk和Application.mk都是NDK默認的配置文件,關於這兩個文件的詳細介紹可以看官網。
最後生成so包就可以了,記住每次修改C文件都需要重新生成so包:
Native原生相比於Hybrid或H5最大優點是具有流暢和復雜的交互效果,觸摸事件便是其中重要一項,包括點擊(Click)、長按(LongClick)、手勢(gestu
本文為大家分享了Android實現拖動選擇按鈕的具體代碼,供大家參考,具體內容如下效果圖View代碼第一步:自定義屬性 <declare-styleable nam
Android提供的系統服務之--Vibrator(振動器)
效果圖:這種效果的實現這裡是采用自定義ExpandableListView,給它設置一個指示布局,在滑動過程中監聽當前是否應該懸浮顯示分類來實現的。今天抽時間,整理了下代