當前位置:首頁 » 安卓系統 » androidndkhttp

androidndkhttp

發布時間: 2023-03-16 18:56:12

❶ android ndk開發 如何實現一個so包含另一個so

不推薦在jni庫之外用so,因為這種情況下,需要在java代碼裡面依次載入相關的so。

如果一定要用的話android.mk裡面的內容如下:
LOCAL_PATH:= $(call my-dir)
# first so, which will be built shared
include $(CLEAR_VARS)
LOCAL_MODULE := shared1
LOCAL_SRC_FILES := libnshared1.so
include $(PREBUILT_SHARED_LIBRARY)

# second so, which will be built shared
include $(CLEAR_VARS)
LOCAL_MODULE := shared2
LOCAL_SRC_FILES := libnshared2.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := yourjni
LOCAL_SRC_FILES := xxxx.cpp
LOCAL_SHARED_LIBRARIES := shared1
LOCAL_SHARED_LIBRARIES := shared2

LOCAL_LDLIBS := -llog

#LOCAL_LDFLAGS = $(LOCAL_PATH)/obj/libstdc++.a
#LOCAL_CPPFLAGS += -lstdc++

include $(BUILD_SHARED_LIBRARY)

❷ android開發,怎麼使用ndk編譯成.so文件

一、首先下載android-ndk,官方網站是:http://developer.android.com/tools/sdk/ndk/index.html
目前最新的版本是android-ndk-r8e-windows-x86.zip,下載地址:
http://dl.google.com/android/ndk/android-ndk-r8e-windows-x86.zip
下載後把壓縮解壓出來,例如:D:\ndk,目錄下的ndk-build.cmd就是用來編譯的批處理命令。
二、編譯,打開cmd命令行窗口,cd進入目錄:D:\ndk\samples\hello-jni,
然後執行命令:D:\ndk\ndk-build.cmd(如果設置過環境變數則直接使用ndk-build.cmd)來編譯hello-jni,如果沒有錯誤會輸出:
Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
"Compile thumb : hello-jni <= hello-jni.c
SharedLibrary : libhello-jni.so
Install : libhello-jni.so => libs/armeabi/libhello-jni.so
三、創建android應用程序並使用so文件
打開eclipse創建一個android應用程序HelloJni,默認的com.example.hellojni包下面有一個MainActivity.java,
在此包下添加一個HelloJni.java,

❸ Android各個版本的NDK官方下載鏈接

NDK官方網站:https://developer.android.google.cn/ndk/downloads/index.html?hl=zh-cn

Google Android NDK官網

ndk_r14b (March 2017)

Windows 32 位: android-ndk-r14b-windows-x86.zip

SHA1校驗:

Windows 64 位: android-ndk-r14b-windows-x86_64.zip

SHA1校驗:

Mac OS X: android-ndk-r14b-darwin-x86_64.zip

SHA1校驗:

Linux 64 位 (x86): android-ndk-r14b-linux-x86_64.zip

SHA1校驗:

ndk_r13b (Oct 2016)

Windows 32-bit : android-ndk-r13b-windows-x86.zip

Windows 64-bit: android-ndk-r13b-windows-x86_64.zip

Mac OS X : android-ndk-r13b-darwin-x86_64.zip

Linux: android-ndk-r13b-linux-x86_64.zip

ndk_r13 (Sept 2016)

Windows 32-bit : https://dl.google.com/android/repository/android-ndk-r13-windows-x86.zip

Windows 64-bit : https://dl.google.com/android/repository/android-ndk-r13-windows-x86_64.zip

Mac OS X : https://dl.google.com/android/repository/android-ndk-r13-darwin-x86_64.zip

Linux : https://dl.google.com/android/repository/android-ndk-r13-linux-x86_64.zip

ndk_r12 (June 2016)

Windows 32-bit : http://dl.google.com/android/repository/android-ndk-r12b-windows-x86.zip

Windows 64-bit : http://dl.google.com/android/repository/android-ndk-r12b-windows-x86_64.zip

Mac OS X 64-bit : http://dl.google.com/android/repository/android-ndk-r12b-darwin-x86_64.zip

Linux 64-bit (x86) : http://dl.google.com/android/repository/android-ndk-r12b-linux-x86_64.zip

ndk_r11c (March 2016)

Windows 32-bit : http://dl.google.com/android/repository/android-ndk-r11c-windows-x86.zip

Windows 64-bit : http://dl.google.com/android/repository/android-ndk-r11c-windows-x86_64.zip

Mac OS X 64-bit : http://dl.google.com/android/repository/android-ndk-r11c-darwin-x86_64.zip

Linux 64-bit (x86) : http://dl.google.com/android/repository/android-ndk-r11c-linux-x86_64.zip

ndk_r11b (March 2016)

Windows 32-bit : http://dl.google.com/android/repository/android-ndk-r11b-windows-x86.zip

Windows 64-bit : http://dl.google.com/android/repository/android-ndk-r11b-windows-x86_64.zip

Mac OS X 64-bit : http://dl.google.com/android/repository/android-ndk-r11b-darwin-x86_64.zip

Linux 64-bit (x86) : http://dl.google.com/android/repository/android-ndk-r11b-linux-x86_64.zip

ndk_r11 (March 2016)

Windows 32-bit : http://dl.google.com/android/repository/android-ndk-r11-windows-x86.zip

Windows 64-bit : http://dl.google.com/android/repository/android-ndk-r11-windows-x86_64.zip

Mac OS X 64-bit : http://dl.google.com/android/repository/android-ndk-r11-darwin-x86_64.zip

Linux 64-bit (x86) : http://dl.google.com/android/repository/android-ndk-r11-linux-x86_64.zip

ndk_r10e(Jan 2015)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r10e-windows-x86.exe

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r10e-windows-x86_64.exe

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r10e-darwin-x86_64.bin

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r10e-darwin-x86.bin

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86.bin

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin

ndk_r10d(December 2014)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r10d-windows-x86.exe

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r10d-windows-x86_64.exe

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r10d-darwin-x86_64.bin

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r10d-darwin-x86.bin

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r10d-linux-x86.bin

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r10d-linux-x86_64.bin

ndk_r10c(October2014)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r10c-windows-x86.exe

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r10c-windows-x86_64.exe

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r10c-darwin-x86.bin

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r10c-darwin-x86_64.bin

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r10c-linux-x86.bin

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r10c-linux-x86_64.bin

ndk_r10b(September2014)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk32-r10b-windows-x86.zip

Windows64-bit : http://dl.google.com/android/ndk/android-ndk32-r10b-windows-x86_64.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk32-r10b-darwin-x86.tar.bz2

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk32-r10b-darwin-x86_64.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk32-r10b-linux-x86.tar.bz2

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk32-r10b-linux-x86_64.tar.bz2

ndk_r10(July2014)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk32-r10-windows-x86.zip

Windows64-bit : http://dl.google.com/android/ndk/android-ndk32-r10-windows-x86_64.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk32-r10-darwin-x86.tar.bz2

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk32-r10-darwin-x86_64.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk32-r10-linux-x86.tar.bz2

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk32-r10-linux-x86_64.tar.bz2

ndk_r9d(March2014)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r9d-windows-x86.zip

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r9d-windows-x86_64.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r9d-darwin-x86.tar.bz2

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r9d-darwin-x86_64.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9d-linux-x86.tar.bz2

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9d-linux-x86_64.tar.bz2

ndk_r9c(December2013)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r9c-windows-x86.zip

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r9c-windows-x86_64.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r9c-darwin-x86.tar.bz2

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r9c-darwin-x86_64.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9c-linux-x86.tar.bz2

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9c-linux-x86_64.tar.bz2

ndk_r9b(October 2013)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86.zip

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86_64.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r9b-darwin-x86.tar.bz2

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r9b-darwin-x86_64.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9b-linux-x86.tar.bz2

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9b-linux-x86_64.tar.bz2

ndk_r9(July 2013)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r9-windows-x86.zip

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r9-windows-x86_64.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r9-darwin-x86.tar.bz2

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r9-darwin-x86_64.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9-linux-x86.tar.bz2

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r9-linux-x86_64.tar.bz2

ndk_r8e(March 2013)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r8e-windows-x86.zip

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r8e-windows-x86_64.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r8e-darwin-x86.tar.bz2

MacOS X 64-bit : http://dl.google.com/android/ndk/android-ndk-r8e-darwin-x86_64.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r8e-linux-x86.tar.bz2

Linux64-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r8e-linux-x86_64.tar.bz2

Note :

NDKr8e is the first NDK with 32bit and 64bit releases. The prior ones were all32bit and didn』t have any suffix, so r8b would be:

ndk_r8d(December 2012)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r8d-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r8d-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r8d-linux-x86.tar.bz2

ndk_r8C(November 2012)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r8C-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r8C-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r8C-linux-x86.tar.bz2

ndk_r8b(July 2012)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r8b-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r8b-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r8b-linux-x86.tar.bz2

ndk_r8(May 2012)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r8-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r8-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r8-linux-x86.tar.bz2

ndk_r7c(April 2012)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r7c-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r7c-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r7c-linux-x86.tar.bz2

ndk_r7b(February 2012)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r7b-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r7b-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r7b-linux-x86.tar.bz2

ndk_r7(November 2011)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r7-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r7-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r7-linux-x86.tar.bz2

ndk_r6b(August 2011)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r6b-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r6b-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r6b-linux-x86.tar.bz2

ndk_r6(July 2011)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r6-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r6-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r6-linux-x86.tar.bz2

ndk_r5c(June 2011)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r5c-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r5c-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r5c-linux-x86.tar.bz2

ndk_r5b(January 2011)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r5b-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r5b-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r5b-linux-x86.tar.bz2

ndk_r5(December 2010)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r5-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r5-darwin-x86.tar.bz2

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r5-linux-x86.tar.bz2

ndk_r4b(June 2010)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r4b-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r4b-darwin-x86.zip

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r4b-linux-x86.zip

ndk_r4(may 2010)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r4-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r4-darwin-x86.zip

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r4-linux-x86.zip

ndk_r3(March 2010)

Windows32-bit : https://dl.google.com/android/ndk/android-ndk-r3-windows.zip

MacOS X 32-bit : http://dl.google.com/android/ndk/android-ndk-r3-darwin-x86.zip

Linux32-bit (x86) : http://dl.google.com/android/ndk/android-ndk-r3-linux-x86.zip

❹ android ndk是什麼

android是安卓的縮寫,NDK是日本電波工業株式會社的英文縮寫,Android NDK 是在SDK前面又加上了「原生」二字,即Native Development Kit,因此又被Google稱為「NDK」。

Android程序運行在Dalvik虛擬機中,NDK允許用戶使用類似C / C++之類的原生代碼語言執行部分程序。NDK包括以下方面:

1、從C / C++生成原生代碼庫所需要的工具和build files。

2、將一致的原生庫嵌入可以在Android設備上部署的應用程序包文件(application packages files ,即.apk文件)中。

3、支持所有未來Android平台的一系列原生系統頭文件和庫。

(4)androidndkhttp擴展閱讀:

NDK的產品優勢:

1、NDK擁有培育人工水晶的豐富經驗。而好的人工水晶決定了優質晶振產品的一半的品質。

2、NDK晶振產品尺寸、規格全面,既可滿足中小型、超小型電子元器件的要求,也適用於各類規格要求的細分市場。

3、NDK晶體諧振器、晶體振盪器具有非常優越的頻率一致性和穩定性。特別在汽車電子市場,即使在嚴峻的寬溫(-40度到150度)和震動撞擊環境下,都能保持良好的穩定性。

參考資料來源:網路:NDK

❺ 如何從零開始創建Android NDK應用

本文主內容:
1、 Android NDK 安裝
2、 安裝Cygwin與使用NDK編譯
3、 在Eclipse中集成C/C++開發環境CDT
4、 安裝Sequoyah插件
5、 JNI編譯環境配置

本文建立在已經完成Android開發環境搭建的基礎上。其基礎環境至少需要包含以下內容:
1、 JDK
2、 Eclipse
3、 Android SDK and ADT
可以參考我之前的「Android開發環境搭建」。
一、Android NDK 安裝與配置
下載Android NDK。下載地址:http://developer.android.com/tools/sdk/ndk/index.html
下載後解壓縮到你的工作目錄,例如:D:\Java\android-ndk-r8,結果如下圖:

注意:samples下麵包含幾個實例開發演示項目,第一次接觸NDK開發,建議先從示例開始。
docs內是技術文檔,英語能力強的可以研究研究。
二、安裝Cygwin與使用NDK編譯
由於NDK開發大都涉及到C/C++在GCC環境下編譯、運行,所以在Windows環境下,需要用Cygwin模擬Linux編譯環境。
下載:
Cygwin的下載地址:http://www.cygwin.com/

點擊右上角的「setup.exe」即可下載。
安裝:
第一步:運行setup.exe程序,直接點擊Next進入下一步。
第二步:選擇安裝方式。第一次可以採用Direct Connection在線下載安裝,如有現成的離線包,可以選擇離線安裝(Install from Local Directory)。
第三步:選擇安裝目錄。比如D:\Java\Cygwin,注意此目錄是指Cygwin最終的安裝目錄,不是下載文件螞皮數暫存目錄。
第四步:設置本地包暫存路徑。暫存目錄默認是放到setup.exe的同級目錄下,建議放到指定的文件夾,如D:\Cygwin_install_file。安裝完成後把這個文件夾打包備份,以後再配置時不用重新下載。
第五步:設置網路連接方式。這個目前河蟹沒爬過來,選第一個即可。
第六步:選悶首擇下載站點地址。據說國內163站點的速度不錯,我也是用的這個。
第七步:等待載入安裝項載入,選擇安裝項。點擊Devel-Default,使之變成Devel-Install,展開後可以看到其下的子項被選中了(網上多數教程都說選中某12個包,找起來太坑爹了,直接全下載了吧,全選多了150M左右)。此界面其他設置都不用動。

第八步:等待下載完成。下載完成時間決定於你選擇的安裝包數量及網路連接速度,安裝我安裝的版本,約983M,下載完成後會自動握亂安裝到上文設置的安裝目錄,安裝也要時間的,總時間較長,去吃個飯沒啥問題。
提醒:第四步的備份建議,盡量去做。如果有備份,第二步中選擇離線安裝。
驗證:
運行安裝目錄下的「Cygwin.bat」,第一次運行時,它會自動創建用戶信息,用戶信息存放在「.\Cygwin\home」中。
在運行「Cygwin.bat」打開的命令行窗口輸入:「cygcheck -c cygwin」命令,會列印出當前Cygwin的版本和運行狀態,如果status是ok的話,則cygwin運行正常。
分別輸入:「make –v」和,「gcc –v」命令如果檢測成功,會有make和gcc相關版本信息列印出來。

設置NDK路徑:
在windows的系統環境變數中添加NDK的路徑。使用「/cygdrive/d/Java/android-ndk-r8」這種Linux風格路徑,如果使用Windows下的「D:\Java\android-ndk-r8」,Cygwin在編譯時會發出警告。

運行Cygwin命令行,可以直接使用此環境變數,當然也可以手動的cd到該目錄:

使用NDK編譯程序:
現在我們用安裝好的NDK來編譯一個NDK提供的sample程序hello-jni(我的目錄位於:D:\Java\android-ndk-r8\samples\hello-jni)。
第一步:運行Cygwin,配置環境變數後可輸入「cd $ndk/samples/hello-jni/」,未配置則輸入命令「cd /cygdrive/d/java/android-ndk-r8/samples/hello-jni」,進入到「hello-jni」工程目錄。

第二步:編譯。輸入命令「$ndk/ndk-build」命令即可編譯。ndk-build是調用ndk的編譯程序。
關於下面的錯誤,我沒遇到,但是前人有總結,記錄如下:
錯誤:Android NDK: Host 'awk' tool is outdated。
解決方法:打開目錄「D:\Java\android-ndk-r8\prebuilt\windows\bin\」,刪除awk.exe(為保險起見請先備份)。

第三步:到」…/hello-jni/libs/armeabi「目錄下看有沒有生成的.so文件,如果有,你的ndk就運行正常啦!

導入NDK的hello-jni示例到Eclipse中:
第一步:在Eclipse中新建一個Android工程HelloJni。在Create Android Project時勾選「Create project from existing source」,Location中填「D:\Java\android-ndk-r8\samples\hello-jni」 (注意:在選擇API level時需要選擇1.5或更高的版本)。
第二步:直接以Android Aplication運行。這里要注意,你之前在使用NDK編譯程序時要把這個hello-jni編譯過並產生了.so文件,此處才能運行起來。

三、在Eclipse中集成C/C++開發環境CDT
CDT的安裝可以使我們在一個工程中,同時開發基於C/C++的Native代碼和基於Java語言的殼,之後的配置還可以使得一次編譯兩部分代碼。
下載:
下載地址:http://www.eclipse.org/cdt/downloads.php
說明:
Eclipse C/C++ IDE Indigo SR2:是帶CDT的Eclipse開發環境。
p2 software repository:在線安裝的地址。(似乎被河蟹爬了)
cdt-master-8.0.2.zip:這個是CDT的離線安裝包。(推薦使用這個,保留離線包,復用)

離線安裝:
Eclipse -> Help -> Install New Software,點擊add。Name:隨意,建議使用好記的「CDT_版本」。Location:點擊Archive,定位到下載的「cdt-master-8.0.2.zip」文件。
錯誤:
如果Location的下面出現「Duplicate location」錯誤,請到Window -> preferences -> Install/Update -> Avaliable Software Site中找到該條,remove之。
驗證:
安裝完成後,在Eclispe中新建一個項目,如果出現了C/C++項目,則表明CDT插件安裝成功了。

四、安裝Sequoyah插件
Sequoyah插件用於設置Android工程對Native開發的支持。
官方網址:http://www.eclipse.org/sequoyah/downloads/
在線安裝:
官網提供了用於在線安裝的Update Site地址以及安裝包的下載地址。貌似安裝包才1M多,在線安裝也沒被河蟹爬過,直接在線安裝了。勾選全部列出的可安裝項並完成安裝。
Location:http://download.eclipse.org/sequoyah/updates/2.0/

注意:
在安裝界面不要勾選「Group items by category」復選框,默認是勾選的,出現了列表為空(There are no categorized items)的情況。

配置:
安裝完Sequoyah插件後,為Android配置NDK路徑。
在「window –> preferences ->Android -> 本機開發」中添加NDK的路徑。

驗證:
右鍵之前建立的「HelloJni」項目,在「Android Tools」選項中包含「Add Native Support…」選項即成功。
五、JNI編譯環境配置
仍舊以之前建立的「HelloJni」為例,到目前為止,如果我們修改「/HelloJni/jni/hello-jni.c」文件,動態鏈接庫libhello-jni.so文件卻不會被重新編譯生成。這是因為我們沒有給JNI項目添加它需要的編譯配置和依賴庫。現在我們來配置它。
第一步:轉換工程。點擊「文件 -> 新建 -> 其他」(快捷鍵:Ctrl+N)。選擇「C/C++」下的「Convert to a C/C++ Project(Adds C/C++ Nature)」。進入「下一步」。

第二步:選中你剛才建的「HelloJni」工程,下面左邊選「Makefile project」右邊選「Cygwin GCC」。確定後提示的「透視圖」不清楚是什麼,點擊「是」即可。

第三步:在「HelloJni」工程上右鍵,選擇「屬性」。配置「C/C++ Build」和「C/C++ General -> Paths and Symbols」。
C/C++ Build:點擊「C/C++ Build」,在右邊的「Builder Settings」中去掉默認勾選的「Use default build command」復選框。設置Build command為「bash D:\Java\android-ndk-r8\ndk-build」。

C/C++ General -> Paths and Symbols:在Includes下add新的GNU C依賴路徑。此「HelloJni」工程需要「D:\Java\android-ndk-r8\platforms\android-8\arch-arm\usr\include」即可,以後根據不同項目選擇不同的依賴庫。

驗證:
將「/HelloJni/jni/hello-jni.c」中的字元串「Hello from JNI !」如改為「Hello JNI from Baron!」,運行後在模擬器上輸出的字元串改變即說明配置成功。

❻ Android ndk如何與伺服器實現HTTP通信

安卓是建立在linux上的虛擬機,除了底層硬體的調用和inux有點關系之外罩弊的話,其他功能的實現基本上都是和linux無關的! 你說的NDK的全稱是Native Development Kit,這里說的應該是Android NDK,我們說這個應該是一個C、C++的開發工具包,或者可以理解為開發框架或者開發環境。以前開發安卓應用告基使用的是java現在使用了NDK之後就實現了C、C++的應用開發! 這里我找到了一篇博客就是關於安卓NDK的,物友族粘在下面給你參考一下: /devinzhang/archive/2012/02/29/2373729.html

❼ 如何在Ubuntu下搭建Android NDK開發環境

1 搭建Android SDK開發環境
參考在在Ubuntu下搭建Android SDK開發環境(圖文) 首先在Ubuntu下搭建Android SDK開發環境.

2 下載NDK開發包
打開官網: http://developer.android.com/sdk/ndk/index.html 下載NDK 開發包,當前最新版本是r7b,如下圖:

下載解壓到 ~/bin 目錄下,有關如何解壓tar.bz2壓縮包,請參考鏈接:linux下各種解包打包命令大全

3 配置NDK環境參數
打開 ~/.bashrc文件:

[plain] view plain
$sudo vim ~/.bashrc

在文件最後一行添加一行如下指令:

[plain] view plain
export PATH=$PATH:~/bin/android-ndk-r7b
保存關閉.

這樣配置後,以後就可以很方便地使用NDK包中所包含的工具了。

接下來測試一下.打開終端輸入如下指令:

[plain] view plain
$ndk-build -v
如果出現如下顯示,就表示可以了.

http://blog.csdn.net/flydream0/article/details/7358540

❽ 如何在Ubuntu下搭建Android NDK開發環境

1 搭建Android SDK開發環境

2 下載NDK開發包

3打開官網: 下載NDK 開發包,當前最新版本是r7b

下載解壓到 ~/bin 目錄下,

3 配置NDK環境參數

打開 ~/.bashrc文件:

❾ vlc-android要怎麼用

一.認識android的架構
Android其本質就是在標準的Linux系統上增加了Java虛擬機Dalvik,並在Dalvik虛擬機上搭建了一個JAVA的application framework,所有的應用程序都是基於JAVA的application framework之上。
android分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層。

二.搭建環境
搭建開發環境
對國內的開發者來說最痛苦的是無法去訪問android開發網站。為了更好的認識世界,對程序員來說,會翻牆也是的一門技術,帶你去領略牆外的世界,好了,不廢話了, 國內開發者訪問(androiddevtools) 上面已經有了所有你要的資源,同時可以下載到我們的主角framework

但是這樣的搭建只能去閱讀源代碼,我們無法去更進一步去實現自己的rom,我們看到錘子的系統在早期的開放rom是自己從新實現了framework的代碼,現在看起來他成功了,所以我們還要去搭建android系統的源碼編譯環境。

搭建源碼編譯環境
http://www.cnblogs.com/bluestorm/p/4419135.html
https://source.android.com/source/downloading.html(這里詳細的介紹了如何下載編譯)
三.開始主題

在一開始寫c程序的時候都有一個運行的入口,比如
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

//這里的main就是應用的入口
int main(int argc, const char * argv[]){
return 0;
}

在計算機網路原理中我們用socket實現一個伺服器端,不斷的接聽客戶端的訪問,而且他的代碼是這樣實現的:
#include <winsock2.h>
#pragma comment(lib, "WS2_32.lib")

#include <stdio.h>
void main()
{
WORD wVersionRequested;//版本號
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD(2, 2);//2.2版本的套接字
//載入套接字型檔,如果失敗返回
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return;
}

//判斷高低位元組是不是2,如果不是2.2的版本則退出
if (LOBYTE(wsaData.wVersion) != 2 ||

HIBYTE(wsaData.wVersion) != 2)

{
return;
}

//創建流式套接字,基於TCP(SOCK_STREAM)

SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);

//Socket地址結構體的創建

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//轉換Unsigned long型為網路位元組序格
addrSrv.sin_family = AF_INET;//指定地址簇
addrSrv.sin_port = htons(6000);
//指定埠號,除sin_family參數外,其它參數都是網路位元組序,因此需要轉換

//將套接字綁定到一個埠號和本地地址上
bind(socSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));//必須用sizeof,strlen不行

listen(socSrv, 5);

SOCKADDR_IN addrClient;//字義用來接收客戶端Socket的結構體

int len = sizeof(SOCKADDR);//初始化參數,這個參數必須進行初始化,sizeof

//循環等待接受客戶端發送請求

while (1)
{
//等待客戶請求到來;當請求到來後,接受連接請求,

//返回一個新的對應於此次連接的套接字(accept)。
//此時程序在此發生阻塞

SOCKET sockConn = accept(socSrv, (SOCKADDR*)&addrClient, &len);

char sendBuf[100];

sprintf(sendBuf, "Welcome %s to JoyChou",

inet_ntoa(addrClient.sin_addr));//格式化輸出

//用返回的套接字和客戶端進行通信

send(sockConn, sendBuf, strlen(sendBuf)+1, 0);//多發送一個位元組

//接收數據

char recvBuf[100];

recv(sockConn, recvBuf, 100, 0);

printf("%s\\n", recvBuf);
closesocket(sockConn);

}
}

他採用了一個while死循環去監聽客戶端的請求。
在一遍啰嗦之後,主角終於閃亮的登場了。

先上源代碼
public final class ActivityThread {

public static void main(String[] args) {
SamplingProfilerIntegration.start();

CloseGuard.setEnabled(false);

Environment.initForCurrentUser();

EventLogger.setReporter(new EventLoggingReporter());

Security.addProvider(new AndroidKeyStoreProvider());

final File configDir = Environment.getUserConfigDirectory(UserHandle.myUserId());
TrustedCertificateStore.setDefaultUserDirectory(configDir);

Process.setArgV0("<pre-initialized>");

Looper.prepareMainLooper();

//從中可以看到為app開辟了一個線程進入了looper之中

ActivityThread thread = new ActivityThread();
thread.attach(false);

if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}

AsyncTask.init();

if (false) {
Looper.myLooper().setMessageLogging(new
LogPrinter(Log.DEBUG, "ActivityThread"));
}

Looper.loop();

throw new RuntimeException("Main thread loop unexpectedly exited");
}

}

看到源碼失望了,沒有一個while循環啊,其實用了他方法實現
//用一個looper的機制循環監聽響應
Looper.prepareMainLooper();

Looper.loop();

進一步深入代碼
public static void loop() {
final Looper me = myLooper();
if (me == null) {
throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");
}
final MessageQueue queue = me.mQueue;

Binder.clearCallingIdentity();
final long ident = Binder.clearCallingIdentity();

// 在這里看到了一個循環監聽消息

for (;;) {
Message msg = queue.next(); // might block
if (msg == null) {
// No message indicates that the message queue is quitting.
return;
}

Printer logging = me.mLogging;
if (logging != null) {
logging.println(">>>>> Dispatching to " + msg.target + " " +
msg.callback + ": " + msg.what);
}

msg.target.dispatchMessage(msg);

if (logging != null) {
logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);
}

// Make sure that ring the course of dispatching the
// identity of the thread wasn't corrupted.
final long newIdent = Binder.clearCallingIdentity();
if (ident != newIdent) {
Log.wtf(TAG, "Thread identity changed from 0x"
+ Long.toHexString(ident) + " to 0x"
+ Long.toHexString(newIdent) + " while dispatching to "
+ msg.target.getClass().getName() + " "
+ msg.callback + " what=" + msg.what);
}

msg.recycleUnchecked();
}
}

❿ 如何在Android下使用JNI

1.引言
我們知道,Android系統的底層庫由c/c++編寫,上層Android應用程序通過Java虛擬機調用底層介面,銜接底層c/c++庫與Java應用程序間的介面正是JNI(JavaNative Interface)。本文描述了如何在ubuntu下配置AndroidJNI的開發環境,以及如何編寫一個簡單的c函數庫和JNI介面,並通過編寫Java程序調用這些介面,最終運行在模擬器上的過程。

2.環境配置

2.1.安裝jdk1.6
(1)從jdk官方網站下載jdk-6u29-linux-i586.bin文件。
(2)執行jdk安裝文件
[html] view plainprint?
01.$chmod a+x jdk-6u29-linux-i586.bin
02.$jdk-6u29-linux-i586.bin
$chmod a+x jdk-6u29-linux-i586.bin
$jdk-6u29-linux-i586.bin
(3)配置jdk環境變數

[html] view plainprint?
01.$sudo vim /etc/profile
02.#JAVAEVIRENMENT
03.exportJAVA_HOME=/usr/lib/java/jdk1.6.0_29
04.exportJRE_HOME=$JAVA_HOME/jre
05.exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
06.exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
$sudo vim /etc/profile
#JAVAEVIRENMENT
exportJAVA_HOME=/usr/lib/java/jdk1.6.0_29
exportJRE_HOME=$JAVA_HOME/jre
exportCLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存後退出編輯,並重啟系統。

(4)驗證安裝

[html] view plainprint?
01.$java -version
02.javaversion "1.6.0_29"
03.Java(TM)SE Runtime Environment (build 1.6.0_29-b11)
04.JavaHotSpot(TM) Server VM (build 20.4-b02, mixed mode)
05.$javah
06.用法:javah[選項]<類>
07.其中[選項]包括:
08.-help輸出此幫助消息並退出
09.-classpath<路徑>用於裝入類的路徑
10.-bootclasspath<路徑>用於裝入引導類的路徑
11.-d<目錄>輸出目錄
12.-o<文件>輸出文件(只能使用-d或-o中的一個)
13.-jni生成JNI樣式的頭文件(默認)
14.-version輸出版本信息
15.-verbose啟用詳細輸出
16.-force始終寫入輸出文件
17.使用全限定名稱指定<類>(例
18.如,java.lang.Object)。
$java -version
javaversion "1.6.0_29"
Java(TM)SE Runtime Environment (build 1.6.0_29-b11)
JavaHotSpot(TM) Server VM (build 20.4-b02, mixed mode)
$javah
用法:javah[選項]<類>
其中[選項]包括:
-help輸出此幫助消息並退出
-classpath<路徑>用於裝入類的路徑
-bootclasspath<路徑>用於裝入引導類的路徑
-d<目錄>輸出目錄
-o<文件>輸出文件(只能使用-d或-o中的一個)
-jni生成JNI樣式的頭文件(默認)
-version輸出版本信息
-verbose啟用詳細輸出
-force始終寫入輸出文件
使用全限定名稱指定<類>(例
如,java.lang.Object)。2.2.安裝android應用程序開發環境
ubuntu下安裝android應用程序開發環境與windows類似,依次安裝好以下軟體即可:
(1)Eclipse
(2)ADT
(3)AndroidSDK
與windows下安裝唯一不同的一點是,下載這些軟體的時候要下載Linux版本的安裝包。
安裝好以上android應用程序的開發環境後,還可以選擇是否需要配置emulator和adb工具的環境變數,以方便在進行JNI開發的時候使用。配置步驟如下:
把emulator所在目錄android-sdk-linux/tools以及adb所在目錄android-sdk-linux/platform-tools添加到環境變數中,android-sdk-linux指androidsdk安裝包android-sdk_rxx-linux的解壓目錄。
[plain] view plainprint?
01.$sudo vim /etc/profile
02.exportPATH=~/software/android/android-sdk-linux/tools:$PATH
03. exportPATH=~/software/android/android-sdk-linux/platform-tools:$PATH
$sudo vim /etc/profile
exportPATH=~/software/android/android-sdk-linux/tools:$PATH
exportPATH=~/software/android/android-sdk-linux/platform-tools:$PATH
編輯完畢後退出,並重啟生效。

2.3.安裝NDK
NDK是由android提供的編譯android本地代碼的一個工具。
(1)從androidndk官網http://developer.android.com/sdk/ndk/index.html下載ndk,目前最新版本為android-ndk-r6b-linux-x86.tar.bz2.
(2)解壓ndk到工作目錄:
[plain] view plainprint?
01.$tar -xvf android-ndk-r6b-linux-x86.tar.bz2
02.$sudo mv android-ndk-r6b /usr/local/ndk
$tar -xvf android-ndk-r6b-linux-x86.tar.bz2
$sudo mv android-ndk-r6b /usr/local/ndk
(3)設置ndk環境變數

[plain] view plainprint?
01.$sudo vim /etc/profile
02.exportPATH=/usr/local/ndk:$PATH
$sudo vim /etc/profile
exportPATH=/usr/local/ndk:$PATH

編輯完畢後保存退出,並重啟生效

(4)驗證安裝

[plain] view plainprint?
01.$ cd/usr/local/ndk/samples/hello-jni/
02.$ ndk-build
03.Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
04.Gdbsetup : libs/armeabi/gdb.setup
05.Install : libhello-jni.so => libs/armeabi/libhello-jni.so
$ cd/usr/local/ndk/samples/hello-jni/
$ ndk-build
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Install : libhello-jni.so => libs/armeabi/libhello-jni.so

3.JNI實現
我們需要定義一個符合JNI介面規范的c/c++介面,這個介面不用太復雜,例如輸出一個字元串。接下來,則需要把c/c++介面的代碼文件編譯成共享庫(動態庫).so文件,並放到模擬器的相關目錄下。最後,啟動Java應用程序,就可以看到最終效果了。

3.1.編寫Java應用程序代碼
(1)啟動Eclipse,新建android工程

Project:JNITest

Package:org.tonny.jni

Activity:JNITest

(2)編輯資源文件

編輯res/values/strings.xml文件如下:編輯res/layout/main.xml文件
我們在主界面上添加了一個EditText控制項和一個Button控制項。

(3)編輯JNITest.java文件


static表示在系統第一次載入類的時候,先執行這一段代碼,在這里表示載入動態庫libJNITest.so文件。

再看這一段:

[java] view plainprint?
01.privatenativeString GetReply();
privatenativeString GetReply();
native表示這個方法由本地代碼定義,需要通過jni介面調用本地c/c++代碼。

[java] view plainprint?
01.publicvoidonClick(View arg0) {
02.edtName.setText(reply);
03.}
publicvoidonClick(View arg0) {
edtName.setText(reply);
}

這段代碼表示點擊按鈕後,把native方法的返回的字元串顯示到EditText控制項。

(4)編譯工程,生成.class文件。

3.2.用javah工具生成符合JNI規范的c語言頭文件

在終端中,進入android工程所在的bin目錄

[plain] view plainprint?
01.$cd ~/project/Android/JNITest/bin
$cd ~/project/Android/JNITest/bin
我們用ls命令查看,可以看到bin目錄下有個classes目錄,其目錄結構為classes/org/tonny/jni,即classes的子目錄結構是android工程的包名org.tonny.jni。請注意,下面我們准備執行javah命令的時候,必須進入到org/tonny/jni的上級目錄,即classes目錄,否則javah會提示找不到相關的java類。

下面繼續:

[plain] view plainprint?
01.$cd classes
02.$javah org.tonny.jni.JNITest
03.$ls
04.org org_tonny_jni_JNITest.h
$cd classes
$javah org.tonny.jni.JNITest
$ls
org org_tonny_jni_JNITest.h

執行javahorg.tonny.jni.JNITest命令,在classes目錄下會生成org_tonny_jni_JNITest.h頭文件。如果不進入到classes目錄下的話,也可以這樣:

[plain] view plainprint?
01.$javah -classpath ~/project/Android/JNITest/bin/classesorg.tonny.jni.JNITest
$javah -classpath ~/project/Android/JNITest/bin/classesorg.tonny.jni.JNITest
-classpath 參數表示裝載類的目錄。

3.3.編寫c/c++代碼
生成org_tonny_jni_JNITest.h頭文件後,我們就可以編寫相應的函數代碼了。下面在android工程目錄下新建jni目錄,即~/project/Android/JNITest/jni,把org_tonny_jni_JNITest.h頭文件拷貝到jni目錄下,並在jni目錄下新建org_tonny_jni_JNITest.c文件,編輯代碼如下:

[cpp] view plainprint?
01.#include<jni.h>
02.#include<string.h>
03.#include"org_tonny_jni_JNITest.h"
04.
05.
06.JNIEXPORTjstring JNICALLJava_org_tonny_jni_JNITest_GetReply
07.(JNIEnv *env, jobject obj){
08.return(*env)->NewStringUTF(env,(char*)"Hello,JNITest");
09.}
#include<jni.h>
#include<string.h>
#include"org_tonny_jni_JNITest.h"

JNIEXPORTjstring JNICALLJava_org_tonny_jni_JNITest_GetReply
(JNIEnv *env, jobject obj){
return(*env)->NewStringUTF(env,(char*)"Hello,JNITest");
}

我們可以看到,該函數的實現相當簡單,返回一個字元串為:"Hello,JNITest"

3.4.編寫Android.mk文件
在~/project/Android/JNITest/jni目錄下新建Android.mk文件,android可以根據這個文件的編譯參數編譯模塊。編輯Android.mk文件如下:

[plain] view plainprint?
01.LOCAL_PATH:= $(call my-dir)
02.include$(CLEAR_VARS)
03.LOCAL_MODULE := libJNITest
04.LOCAL_SRC_FILES:= org_tonny_jni_JNITest.c
05.include$(BUILD_SHARED_LIBRARY)
LOCAL_PATH:= $(call my-dir)
include$(CLEAR_VARS)
LOCAL_MODULE := libJNITest
LOCAL_SRC_FILES:= org_tonny_jni_JNITest.c
include$(BUILD_SHARED_LIBRARY)

LOCAL_MODULE表示編譯的動態庫名稱

LOCAL_SRC_FILES 表示源代碼文件

3.5.用ndk工具編譯並生成.so文件
進入到JNITest的工程目錄,執行ndk-build命令即可生成libJNITest.so文件。

[plain] view plainprint?
01.$cd ~/project/Android/JNITest/
02.$ndk-build
03.Invalidattribute name:
04.package
05.Install : libJNITest.so => libs/armeabi/libJNITest.so
$cd ~/project/Android/JNITest/
$ndk-build
Invalidattribute name:
package
Install : libJNITest.so => libs/armeabi/libJNITest.so
可以看到,在工程目錄的libs/armeabi目錄下生成了libJNITest.so文件。

3.6.在模擬器上運行
(1)首先,我們把android模擬器啟動起來。進入到emulator所在目錄,執行emulator命令:

[plain] view plainprint?
01.$cd ~/software/android/android-sdk-linux/tools
02.$./emulator @AVD-2.3.3-V10 -partition-size 512
$cd ~/software/android/android-sdk-linux/tools
$./emulator @AVD-2.3.3-V10 -partition-size 512
AVD-2.3.3-V10表示你的模擬器名稱,與在Eclipse->AVDManager下的AVDName對應,-partition-size表示模擬器的存儲設備容量。

(2)接下來,我們需要把libJNITest.so文件拷貝到模擬器的/system/lib目錄下,執行以下命令:

[plain] view plainprint?
01.$cd ~/project/Android/JNITest/libs/armeabi/
02.$adb remount
03.$adb push libJNITest.so /system/lib
04.80 KB/s (10084 bytes in 0.121s)
$cd ~/project/Android/JNITest/libs/armeabi/
$adb remount
$adb push libJNITest.so /system/lib
80 KB/s (10084 bytes in 0.121s)

當在終端上看到有80 KB/s (10084 bytes in 0.121s)傳輸速度等信息的時候,說明拷貝成功。

(3)在終端上執行JNITest程序,這個我們可以在Eclipse下,右鍵點擊JNITest工程,RunAs->Android Application,即可在模擬器上啟動程序

熱點內容
如何關閉原來的鎖屏密碼 發布:2025-05-09 23:28:31 瀏覽:679
預編譯頭子目錄 發布:2025-05-09 23:05:39 瀏覽:175
出軌資料庫 發布:2025-05-09 22:48:47 瀏覽:149
java過濾器的作用 發布:2025-05-09 22:44:06 瀏覽:858
定投策略演算法 發布:2025-05-09 22:21:36 瀏覽:602
梯形糾正演算法 發布:2025-05-09 22:16:46 瀏覽:718
解壓心跳聲 發布:2025-05-09 22:16:10 瀏覽:719
如何取消安卓手機程序隱私密碼 發布:2025-05-09 21:48:03 瀏覽:48
c語言字元串數組連接 發布:2025-05-09 21:46:37 瀏覽:133
源碼的移碼 發布:2025-05-09 21:25:01 瀏覽:754