【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 )
生活随笔
收集整理的這篇文章主要介紹了
【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. 可獲取的參數列舉 : 下面是從百度百科上拔下來的 , 僅供參考 ;
總結
以上是生活随笔為你收集整理的【Android NDK 开发】在 C 代码中获取 Android 系统信息 ( NDK 项目创建 | NDK 配置 | 获取 Android 系统版本号 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 高性能音频】高性能音频
- 下一篇: 【运筹学】线性规划 单纯形法 ( 原理