日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 )

發布時間:2025/6/17 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

        • I . 創建 NDK 項目
        • II . NDK 項目 相關配置
        • III . NDK 中獲取 Android 版本號
        • IV . 使用 __system_property_get 可獲取的參數



I . 創建 NDK 項目



1. 創建支持 NDK 的項目 : 當前最新的 Android Studio 支持直接創建 支持 C/C++ 的帶 NDK 配置的項目 ;

如果向現有項目加入 C/C++ 代碼 , 首先要創建 cpp 代碼文件 , 然后創建 CMakeList.txt 編譯腳本 , 最后在 build.gradle 中配置該編譯腳本 , 這里不再詳細描述 ;

在菜單欄中選擇 File -> New -> New Project , 在彈出的對話框中選擇 Native C++ 項目 ;

2. 設置項目屬性 : 輸入項目名稱 , 包名 , 選擇項目位置 ;

3. 選擇 C++ 版本 : 選擇默認即可 ;



II . NDK 項目 相關配置



1. CMakeList.txt C/C++ 代碼編譯腳本 :

# For more information about using CMake with Android Studio, read the # documentation: https://d.android.com/studio/projects/add-native-code.html# 設置 CMake 編譯 Native 庫 需要的最小版本號cmake_minimum_required(VERSION 3.4.1)# 創建庫并為其命名 , 設置該庫類型 , 靜態(.a) 或 動態 (.so) , 設置編譯的源代碼位置 # 可以在此定義不同的庫 , 并且 CMake 會編譯這些庫 # Gradle 在 APK 中會自動打包并使用這些庫add_library( # 設置庫的名稱native-lib# 設置該庫時靜態庫SHARED# 設置源代碼的相對路徑 , 路徑是相對于該 CMakeList.txt 編譯腳本的native-lib.cpp )# 查找指定的預編譯庫 , 將查找到的庫 當做變量 存儲 起來 , 之后可以直接使用該變量鏈接 目標庫 ; # CMake 默認包含系統庫 , 這里我們需要指定 想要添加的 公共 NDK 庫 名稱 # CMake 會在編譯前驗證該庫是否存在find_library( # 設置變量路徑名稱log-lib# 指定 你想要的 CMake 定位的 NDK 庫名稱log )# 指定 CMake 要鏈接到目標庫的 其它庫 ; # 你可以鏈接多種庫 , 如 在該腳本中定義的庫 , 預編譯的第三方庫 , 系統庫 等 ;target_link_libraries( # 指定目標庫native-lib# 將 NDK 中的 log 日志庫鏈接到目標庫${log-lib} )

2. build.gradle 項目編譯腳本配置 :

apply plugin: 'com.android.application'android {...//設置 CMake 的編譯腳本位置 , 和 Cmake 的版本號externalNativeBuild {cmake {path "src/main/cpp/CMakeLists.txt"version "3.10.2"}} }dependencies {... }

III . NDK 中獲取 Android 版本號



1. Activity 界面代碼 :

package com.example.a001_ndk_get_version;import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 調用 NDK 本地方法示例TextView tv = findViewById(R.id.sample_text);tv.setText(stringFromJNI());}/*** Native 本地方法 , 在 native-lib.cpp 中實現 , 其方法名是* Java_com_example_a001_1ndk_1get_1version_MainActivity_stringFromJNI* 該 C++ 代碼文件在 src/main/cpp 目錄下*/public native String stringFromJNI();// 在應用開啟的時候加載 native-lib.so 庫static {System.loadLibrary("native-lib");} }

2. NDK C++ 代碼 :

#include <jni.h> #include <string>#include <sys/system_properties.h>// 日志打印 #include <android/log.h> #define LOG_TAG "TAG_LOG" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)extern "C" JNIEXPORT jstring JNICALL Java_com_example_a001_1ndk_1get_1version_MainActivity_stringFromJNI(JNIEnv* env,jobject /* this */) {// 1. 獲取 SDK 版本號 , 存儲于 C 字符串 sdk_verison_str 中char sdk[128] = "0";// 獲取版本號方法__system_property_get("ro.build.version.sdk", sdk);//將版本號轉為 int 值int sdk_verison = atoi(sdk);// 2. 獲取 手機型號char model[128] = "0";__system_property_get("ro.product.model",model);// 生成 C++ 字符串std::string hello = "Hello from C++ \nSDK Version : ";// 設置 SDK 版本號hello.append(sdk);// 設置 手機型號hello.append("\nDevice Model : ");hello.append(model);return env->NewStringUTF(hello.c_str()); }

3. 展示結果 :



IV . 使用 __system_property_get 可獲取的參數



可獲取參數 :

  • 1. 獲取 SDK 版本號 : 上面的 __system_property_get("ro.build.version.sdk", sdk); 方法中 , “ro.build.version.sdk” 代表了獲取 Android 系統 SDK 版本號 ;
  • 2. 獲取手機型號 : __system_property_get("ro.product.model",model); 代碼中 , " ro.product.model " 代表獲取手機型號 ;
  • 3. 參數字符串來源 : 上述的參數字符串都定義在 Android 系統中的 build.prop 配置文件中 ;
  • 4. 可獲取的參數列舉 : 下面是從百度百科上拔下來的 , 僅供參考 ;
# begin build properties (開始設置系統性能) # autogenerated (通過設置形成系統信息) ro.=GRI40 (版本ID) ro.build.=GRJ22 (版本號) ro.build.version.incremental=eng.buildbot.20110619.060228 (版本增量) ro.build.version.sdk=10 (sdk版本) ro.build.version.codename=REL (版本代號) ro.build.version.release=2.3.4 (Android 2.3.4系統) ro.build.date=Sun Jun 19 06:02:58 UTC 2011 (制作者及制作時間) ro.build.date.utc=0 ro.build.type=user (編譯模式,如user,userdebug,eng,test模式) ro.build.user=buildbot (編譯賬戶) ro.build.host=bb1 (編譯主機系統) ro.build.tags=test-keys (編譯標簽) ro.product.model=HTC Wildfire (HTC內部手機代號) ro.product.brand=htc_wwe (手機品牌) ro.product.name=htc_buzz (手機正式名稱) ro.product.device=buzz (采用的設備) ro.product.board=buzz (采用的處理器) ro.product.cpu.abi=armeabi-v6j (cpu的版本) ro.product.cpu.abi2=armeabi (cpu的品牌) ro.product.manufacturer=HTC (手機制造商) ro.product.locale.language=zh (手機默認語言) ro.product.locale.region=CN (地區語言) ro.wifi.channels= (WIFI連接的渠道) ro.board.platform=msm7k (主板平臺) # ro.build.product is obsolete; use ro.product.device (舊代碼ro.build.product,使用代碼ro.product.device) ro.build.product=buzz (建立產品) # Do not try to parse ro.build.description or .fingerprint (不要試圖修改description和fingerprint) ro.build.description=passion-user 2.3.3 GRI40 102588 release-keys (用戶的KEY) ro.build.fingerprint=google/passion/passion:2.3.3/GRI40/102588:user/release-keys (系統指紋) # end build properties (性能代碼完畢) # # system.prop for buzz (系統技術支持由BUZZ提供) # # Density in DPI of the LCD of this board. This is used to scale the UI (高密度的液晶的DPI板。這是用來大規模UI的) # appropriately. If this property is not defined, the default value is 160 dpi. (appropriately.如果這個屬性沒有定義,缺省值是160 dpi的分辨率) ro.sf.lcd_density=240 (顯示屏分辨率,數值越大分辨率越底,240就是800*480的) # View configuration for QVGA. (屏幕的設置) view.fading_edge_length=8 view.touch_slop=15 (觸摸屏靈敏度,數值越大越靈敏) view.minimum_fling_velocity=25 (滑動速度) view.scroll_friction=0.008 (滑動誤差) # RIL specific configuration. (特定設置) rild.libpath=/system/lib/libhtc_ ro.ril.ecc.HTC-WWE=999 ro.ril.ecc.HTC-ELL=92,93,94 ro.ril.enable.a52.HTC-ITA=1 ro.ril.enable.a53.HTC-ITA=1 ro.ril.enable.a52=0 ro.ril.enable.a53=1 ro.ril.vmail.23415=1571,BT ro.ril.hsdpa.category=8 (hsdpa全稱High Speed Downlink Packet Access中文意思:高速下行分組接入,設置的數越大傳輸越快) ro.ril.htcmaskw1.bitmask=429496 ro.ril.htcmaskw1=14449 ro.ril.def.agps.mode=2 (打開AGPS服務支持,可改為ro.ril.def.agps.mode=0 改后能省電但GPS定位速度會變慢) ro.ril.gprsclass=12 (GPRS設置) # For HSDPA low throughput (HSDPA低輸量) ro.ril.disable.power.collapse=1 (關閉電源) # Modify MMS APN retry timer from 5s to 2s. (修改短信的APN設置5秒為2秒) ro.gsm.2nd_data_retry_config=max_retries=3, 2000, 2000, 2000 # Time between scans in seconds. Keep it high to minimize battery drain.(掃描在幾秒之內,可降低用電量) # This only affects the case in which there are remembered access points, (這個修改僅能影響此文件) # but none are in range.(但是沒有一項是在范圍內的) wifi.interface=eth0 (WIFI界面) wifi.supplicant_scan_interval=45 (WIFI掃描間隔時間,這里設置是45秒。把這個時間設置長點能省電) # Mobile data interfaces (移動數據的接口) mobiledata.interfaces=rmnet0,rmnet1,rmnet2 # Allow or deny tethering. (允許和拒絕綁定) ro.tether.denied=false # Default network type. (默認的網絡類型) # 0 => WCDMA Preferred. (0=WCDMA優先) ro.telephony.default_network=0 # Enable Google-specific location features, (谷歌特定地點的設置) # like NetworkLocationProvider and LocationCollector.(如網絡服務器提供商和服務器位置) ro.c o m.google.locationfeatures=1 # The OpenGL ES API level that is natively supported by this device. (開放式繪圖介面) # This is a 16.16 fixed point number. (界面有16個點,16個不動點數量) ro.opengles.version=65536 (開放式繪圖介面參數) # Disable fs check on boot by default. (開機時默認禁用FS檢查) sys.checkfs.fat=false # Performance settings. (性能設置) dalvik.vm.execution-mode=int:jit dalvik.vm.heapsize=24m (虛擬內存大小,可設置為16m或24m或32m或48m) persist.sys.use_dithering=1 persist.sys.purgeable_assets=1 # Increase SKIA decode memory capability for progressive jpg file. ro.media.dec.jpeg.memcap=20000000 # # ADDITIONAL_BUILD_PROPERTIES (其他性能設置) no_require_sim=true (手機卡保護設置) ro.rommanager.developerid=cyanogenmodnightly (固件管理器開發者是CM大神) ro.url.legal=http://www./intl/%s/mobile/android/basic/phone-legal.html ro.url.legal.android_privacy=http://www]/intl/%s/mobile/android/basic/privacy.html ro. com.google.clientidbase=android-google (谷歌客戶身份) ro. com.android.wifi-watchlist=GoogleGuest (WIFI用戶名單) ro.setupwizard.enterprise_mode=1 (默認情景模式) ro. com.android.dateformat=MM-dd-yyyy (默認時間格式,改為yyyy-MM-dd,顯示效果就是XXXX年XX月XX日) ro. com.android.dataroaming=false (漫游設置) ro.config.ringtone=Playa.ogg (默認鈴聲設置,文件在/system/media/audio/ringtones 把喜歡的鈴聲放這里,比如123. MP3放入ringtones文件夾中,這里代碼改為ro.config.ringtone=123. mp3) ro.config.notification_sound=regulus.ogg (默認提示音,文件在/system/media/audio/notifications 修改方法同上) ro.config.alarm_alert=Alarm_Beep_03.ogg (默認鬧鈴,文件在/system/media/audio/alarms 修改方法同上) ro.modversion=CyanogenMod-7-06192011-NIGHTLY-buzz (版本信息,改這個能讓你大名出現系統關于中,改為ro.modversion=xxxxx) ro.setupwizard.mode=OPTIONAL (安裝向導模式) net. bt. name=Android (系統名稱) dalvik.vm.stack-trace-file=/data/anr/traces.txt

總結

以上是生活随笔為你收集整理的【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。