❶ linux下NDK編譯出的SO庫能在WIndows下的android工程直接使用么
可以使用的。
解析:首先Android就是Linux內核。
android應用程序開發環境: 包括eclipse、java、 android sdk、 adt等。
安裝android-ndk開發包,這個開發包可以在google android 官網下載: 通過這個開發包的工具才能將android jni 的C/C++的代碼編譯成庫
android的NDK開發需要在linux下進行: 因為需要把C/C++編寫的代碼生成能在arm上運行的.so文件,這就需要用到交叉編譯環境,而交叉編譯需要在linux系統下才能完成。
備註:NDK編譯步驟:
1.選擇 ndk 自帶的例子 hello-jni ,位於E:android-ndk-r5sampleshello-jni( 根據具體的安裝位置而定 ) 。
2.運行 cygwin ,輸入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,進入到 E:android-ndk-r5sampleshello-jni 目錄。
3.輸入 $NDK/ndk-build ,執行成功後,它會自動生成一個 libs 目錄,把編譯生成的 .so 文件放在裡面。 ($NDK是調用我們之前配置好的環境變數, ndk-build 是調用 ndk 的編譯程序 )
4.此時去 hello-jni 的 libs 目錄下看有沒有生成的 .so 文件,如果有,ndk 就運行正常了。
❷ android ndk zip 怎麼使用
解壓啊!在工具中設置下ndk路徑就行了!
❸ 如何在android app中使用STL庫
方法:
1.在jni目錄下新建Application.mk; 加入 APP_STL := stlport_static右邊的值還可以換成下面幾個:
system - 使用默認最小的C++運行庫,這樣生成的應用體積小,內存佔用小,但部分功能將無法支持
stlport_static - 使用STLport作為靜態庫,這項是Android開發網極力推薦的
stlport_shared - STLport作為動態庫,這個可能產生兼容性和部分低版本的Android固件,目前不推薦使用。
gnustl_static - 使用 GNU libstdc++ 作為靜態庫
默認情況下STLPORT是不支持C++異常處理和RTTI,所以不要出現 -fexceptions 或-frtti;如果真的需要,可以使用gnustl_static來支持標准C++的特性,但生成的文件體積會偏大,運行效率會低一些。
支持C++異常處理,在Application.mk中加入 LOCAL_CPPFLAGS +=-fexceptions這句,同理支持RTTI,則加入LOCAL_CPPFLAGS +=-frtti,這里再次提醒大家,第二條說的使用gnustl靜態庫,而不是stlport。
強制重新編譯 STLPort ,在Application.mk中加入STLPORT_FORCE_REBUILD := true可以強制重新編譯STLPort源碼,由於一些原因可能自己需要修改下STLPort庫,一般普通的開發者無需使用此項
2. 在要使用STL的cpp文件中包含相關的頭文件,並且使用using namespace std;
❹ 如何用Android NDK編譯FFmpeg
1、android的NDK開發需要在linux下進行: 因為需要把C/C++編寫的代碼生成能在arm上運行的.so文件,這就需要用到交叉編譯環境,而交叉編譯需要在linux系統下才能完成。
2、安裝android-ndk開發包,這個開發包可以在google android 官網下載: 通過這個開發包的工具才能將android jni 的C/C++的代碼編譯成庫
android應用程序開發環境: 包括eclipse、java、 android sdk、 adt等。
NDK編譯步驟:
a.選擇 ndk 自帶的例子 hello-jni ,我的位於E:\android-ndk-r5\samples\hello-jni( 根據具體的安裝位置而定 ) 。
b.運行 cygwin ,輸入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,進入到 E:\android-ndk-r5\samples\hello-jni 目錄。
c.輸入 $NDK/ndk-build ,執行成功後,它會自動生成一個 libs 目錄,把編譯生成的 .so 文件放在裡面。 ($NDK是調用我們之前配置好的環境變數, ndk-build 是調用 ndk 的編譯程序 )
d.此時去 hello-jni 的 libs 目錄下看有沒有生成的 .so 文件,如果有,ndk 就運行正常啦。
❺ Qt for Android生成的so庫,在Java for Android中被調用,請問有什麼思路嗎
可以調用,但是不能直接調用,要通過代碼目的JNI去調用,在JNI中導入頭文件,通過NDK編譯成功後即可。
NDK編譯步驟:
1.選擇 ndk 自帶的例子 hello-jni ,我的位於E:\android-ndk-r5\samples\hello-jni( 根據具體的安裝位置而定 ) 。
2.運行 cygwin ,輸入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,進入到 E:\android-ndk-r5\samples\hello-jni 目錄。
3.輸入 $NDK/ndk-build ,執行成功後,它會自動生成一個 libs 目錄,把編譯生成的 .so 文件放在裡面。 ($NDK是調用我們之前配置好的環境變數, ndk-build 是調用 ndk 的編譯程序 )
4.此時去 hello-jni 的 libs 目錄下看有沒有生成的 .so 文件,如果有,ndk 就運行正常啦。
❻ Android NDK中對STL的兩種支持gnustl和stlport有什麼區別
Android NDK從r5b版本開始有官方支持的STL了,有一個crystax版本早已經支持。官方的支持有兩個版本一個是gnu的,一個是stlport。如果你需要在你的NDK程序中使用STL,那麼需要在Application.mk文件中添加一個選項,就是APP_STL := stlport_static。 其中APP_STL的取值有以下四種: system -- 系統默認的最小支持的C++運行時庫 stlport_static -- 以靜態鏈接的方式使用stlport版本的STL stlport_shared -- 以動態鏈接的方式使用stlport版本的STL gnustl_static -- 以靜態鏈接的方式使用gnu版本的STL如果你和我一樣並沒有使用Android.mk和Application.mk,而是使用Code::Blocks或者Visual studio 2010,那麼在配置環境時,如果需要STL的支持,那麼就需要注意自己要指定stl的包含路徑。鏈接就根據需要自己鏈接不同的版本。請注意,stlport有靜態鏈接和動態鏈接兩種方式,而gnu的僅有靜態鏈接方法。另外一個需要注意的就是官方提供的這個stlport版本不支持RTTI和異常,換言之,如果你使用了stlport版本的STL,則不能使用-fexceptions和-frtti這兩個編譯選項。
❼ android studio怎麼設置用32位ndk
使用多少位的NDK不是由Android Studio決定的,是本身操作系統決定的。畢竟啟動AS的時候,就要選擇是啟動studio或者studio64。
❽ android 編譯好的ndk庫應該放在哪個目錄
可以使用的。 解析:首先Android就是Linux內核。 android應用程序開發環境: 包括eclipse、java、 android sdk、 adt等。 安裝android-ndk開發包,這個開發包可以在google android 官網下載: 通過這個開發包的工具才能將android jni 的C/C++的代碼編譯成庫 android的NDK開發需要在linux下進行: 因為需要把C/C++編寫的代碼生成能在arm上運行的.so文件,這就需要用到交叉編譯環境,而交叉編譯需要在linux系統下才能完成。 備註:NDK編譯步驟: 1.選擇 ndk 自帶的例子 hello-jni ,位於E:\android-ndk-r5\samples\hello-jni( 根據具體的安裝位置而定 ) 。 2.運行 cygwin ,輸入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,進入到 E:\android-ndk-r5\samples\hello-jni 目錄。 3.輸入 $NDK/ndk-build ,執行成功後,它會自動生成一個 libs 目錄,把編譯生成的 .so 文件放在裡面。 ($NDK是調用我們之前配置好的環境變數, ndk-build 是調用 ndk 的編譯程序 ) 4.此時去 hello-jni 的 libs 目錄下看有沒有生成的 .so 文件,如果有,ndk 就運行正常了。
❾ sequoyah插件後,為android配置ndk路徑 怎麼配置不成功
閱讀前請確保你已經下載和安裝了:
1、Eclipse
2、Eclipse-adt插件;Android-SDK
3、Android-NDK;cygwin
還需要進行一些准備工作:
1、下載和安裝cdt插件。
可以在eclipse中使用Help->Install New Software直接 安裝
插件比較大,可以只選擇C/C++ Development Tools這一項安裝。
2、下載和安裝sequoyah插件。
注意:需要將Group Items By Category前的勾去掉,然後選擇全部
現在可以進行配置了。(以下使用的android-ndk版本為r7b)
1、配置C語言的INCLUDE路徑和LIB路徑。
打開window菜單下的preference選項。選擇C/C++,Build,environment,向其中添加:
C_INCLUDE_PATH=(Cygwin目錄)\user\include;(ndk目錄)\platforms\(你使用的平台)\(CPU)\usr\include
CPLUS_INCLUDE_PATH=(Cygwin目錄)\user\include;(ndk目錄)\platforms\(你使用的平台)\(CPU)\usr\include
LIBRARY_PATH=(Cygwin目錄)\user\lib;(ndk目錄)\platforms\(你使用的平台)\(CPU)\usr\lib
2、配置Android NDK路徑
注意:在sequoyah插件安裝後才會有這一項。
打開window菜單下的preference選項。選擇Android,Native Development(本地開發)
選擇你的NDK安裝目錄。
但是,這個插件目前僅支持ndk的r4和r5版本,更高版本會提示這個路徑無效。
其實,插件只是需要這個參數向PATH中添加這個路徑,但是不設置這個路徑會導致插件工作不正常。
我的解決方法是,手動創建以下文件:
(NDK目錄)\toolchains\arm-eabi-4.4.0\prebuilt\windows\arm-eabi-4.4.0\bin\gcc.exe
從第二級目錄開始可能就是不存在的,最後的gcc.exe可以是0位元組。
這樣插件就配置完成了。
3、注意:需要將cygwin的bin目錄添加到windows 的PATH中
現在,差不多就可以正常使用了。
新建Android工程後,右鍵選擇Android Tools-->Add Native Support...
插件會自動創建jni文件夾一個cpp文件和Android.mk文件。
寫好你的代碼後,就可以直接通過Run As-->Android Application運行了。
最後,你很可能遇到如下錯誤信息:
Error: Cannot run program "ndk-build": Launching failed解決方法是打開工程屬性,選擇C/C++ Build
設置Build command為 bash (ndk目錄)\ndk-build
轉載
❿ android studio ndk怎麼調用
android studio ndk調用過程如下:
通過jniaes案例說明調用NDK層配置過程
而我們通過底層來判斷簽名是否正確,如果正確則繼續執行核心代碼,否則退出程序,這樣就可以防止別人惡意反編譯,並進行二次打包。
首先去官網下載一個最新的NDK,隨便放到哪都行,像我放在D:DevAndroidandroid-ndk-r10d.
(1) 新建一個項目:名稱JniAes
首先在java類中添加native介面,注意寫好native介面和System.loadLibrary()即可。代碼如下:
1 public synchronized static native String getFromNativeIv();
2 public synchronized static native String getStringFromNative();
3 public synchronized static native int jniCheckAPP(Context context);
4
然後build project得到其中中間文件,我們關注的是.class文件。編譯OK以後生成的class文件在AS工程的如下目錄:
aesapp
(2)接下來跟class文件生成相應的.h頭文件,執行如下命令即可
點擊"View->Tool Windows->Terminal" 即在Studio中進行終端命令行工具.執行如下命令生成c語言頭文件.
javah -d jni -classpath c:
android-16android.jar;....uildintermediatesclassesdebug com.aes.jniaes.MainActivity
(3)然後將剛才的 .h文件剪切過來。在jni目錄下新建一個c文件,隨意取名,我的叫strk.c 。
strk.c文件,用於實現核心代碼邏輯,判斷包名.哈希值是否合法,如果返回1,為合法。反之,則不合法。入口方法為:
jint Java_com_aes_jniaes_MainActivity_jniCheckAPP(JNIEnv* env, jobject context,
jobject thiz)
接下來在工程的local.properties文件中添加NDK路徑(上面下載好的那個NDK),類似其中的SDK路徑一樣,我的添加後如下:
sdk.dir=D:\Dev\Android\android-sdk-windows
ndk.dir=D:\Dev\Android\android-ndk-r10d
(4)接下來在app mole目錄下的build.gradle中設置庫文件名(生成的so文件名)。找到gradle文件的defaultConfig這項,在裡面添加如下內容:
defaultConfig {
applicationId "com.aes.jniaes"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
ndk {
moleName "checkapp-jni" //生成的so名字
abiFilters "armeabi", "armeabi-v7a", "x86" //輸出指定三種abi體系結構下的so庫。目前可有可無。
}
}
(5)最後就是添加靜態初始化loadLibrary代碼,添加如下:
static {
System.loadLibrary("checkapp-jni"); //so文件的名字
}
編譯出來的so文件在aesappuildintermediates dkdebuglib目錄下
那麼如何將編譯好的so文件進行使用,可以通過如下方式:
二 .引用so文件
(1).在「src/main」目錄中新建名為「jniLibs」的目錄;
(2).將so文件復制、粘貼到「jniLibs」目錄內。