android ndk 開發獲取應用包名以及keystroe簽名信息
在做此操作之前,需要保證ndk環境以配置完成,並對jni的語法有一定的瞭解。
1.定義native java 類
這裡的InfoJni 是在app build 檔案中配置的moduleName 保持一致
2.通過jni 編譯成.h 檔案
首先Terminal 進入到 java 資料夾下 ,然後執行命令—>: javah -encoding utf-8 -jni com.mvp.cn.jni.JNIUtil
3.將剛剛編譯玩的標頭檔案放入新建的jni資料夾下
4,在jni資料夾下建立.c 檔案,引入剛才放進來的.h標頭檔案,開始寫獲取自己的程式碼邏輯
獲取包名程式碼如下:
jclass contextClass = (jclass)(*env)->NewGlobalRef(env,(*env)->FindClass(env,"android/content/Context"));
jmethodID getPackageNameId = (*env)->GetMethodID(env,contextClass, "getPackageName","()Ljava/lang/String;");
jstring packNameString = (jstring)(*env)->CallObjectMethod(env,contextObject, getPackageNameId);
return packNameString;
獲取應用簽名信息程式碼如下:
jclass context_class = (*env)->GetObjectClass(env,context_object);
//context.getPackageManager()
jmethodID methodId = (*env)->GetMethodID(env,context_class, "getPackageManager", "()Landroid/content/pm/PackageManager;");
jobject package_manager_object = (*env)->CallObjectMethod(env,context_object, methodId);
if (package_manager_object == NULL) {
// __android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageManager() Failed!");
return NULL;
}
//context.getPackageName()
methodId = (*env)->GetMethodID(env,context_class, "getPackageName", "()Ljava/lang/String;");
jstring package_name_string = (jstring)(*env)->CallObjectMethod(env,context_object, methodId);
if (package_name_string == NULL) {
// __android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageName() Failed!");
return NULL;
}
(*env)->DeleteLocalRef(env,context_class);
//PackageManager.getPackageInfo(Sting, int)
jclass pack_manager_class = (*env)->GetObjectClass(env,package_manager_object);
methodId = (*env)->GetMethodID(env,pack_manager_class, "getPackageInfo", "(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");
(*env)->DeleteLocalRef(env,pack_manager_class);
jobject package_info_object = (*env)->CallObjectMethod(env,package_manager_object, methodId, package_name_string, 64);
if (package_info_object == NULL) {
// __android_log_print(ANDROID_LOG_INFO, "JNITag","getPackageInfo() Failed!");
return NULL;
}
(*env)->DeleteLocalRef(env,package_manager_object);
//PackageInfo.signatures[0]
jclass package_info_class = (*env)->GetObjectClass(env,package_info_object);
jfieldID fieldId = (*env)->GetFieldID(env,package_info_class, "signatures", "[Landroid/content/pm/Signature;");
(*env)->DeleteLocalRef(env,package_info_class);
jobjectArray signature_object_array = (jobjectArray)(*env)->GetObjectField(env,package_info_object, fieldId);
if (signature_object_array == NULL) {
// __android_log_print(ANDROID_LOG_INFO, "JNITag","PackageInfo.signatures[] is null");
return NULL;
}
jobject signature_object = (*env)->GetObjectArrayElement(env,signature_object_array, 0);
(*env)->DeleteLocalRef(env,package_info_object);
//Signature.toCharsString()
jclass signature_class = (*env)->GetObjectClass(env,signature_object);
methodId = (*env)->GetMethodID(env,signature_class, "toCharsString", "()Ljava/lang/String;");
(*env)->DeleteLocalRef(env,signature_class);
jstring signature_string = (jstring)(*env)->CallObjectMethod(env,signature_object, methodId);
return signature_string;
5,到這裡就寫完了,然後開始編譯
編譯完成後:
然後將這幾個so庫放入 工程 libs下
然後在activity 中就可以呼叫剛才定義的native方法了。如圖。
到這裡就大功告成了-。-
相關推薦
android ndk 開發獲取應用包名以及keystroe簽名信息
在做此操作之前,需要保證ndk環境以配置完成,並對jni的語法有一定的瞭解。 1.定義native java 類 這裡的InfoJni 是在app build 檔案中配置的moduleName 保持一致 2.通過jni 編譯成.h 檔案 首先Terminal 進入到
Android自動化測試探索(三)Android SDK tools安裝、aapt配置以及使用aapt獲取apk包名
Android SDK tools安裝 下載連線: https://www.androiddevtools.cn 找到對應mac的版本下載安裝即可 AAPT配置 #1. 進入根目錄 cd ~ #2. 開啟.bash_profile, 如
java解析xml文件練習——通過應用包名獲取應用圖標即其他信息(基於魅族應用商店)
fin vma tdm row con smartd enter music close 1、解析包名數據文件(txt文件),並生成包名數組: package jsouphtml; import java.io.BufferedReader; import j
Android----獲得當前應用包名、當前activity的名字、推斷是否是系統桌面、service類
owin agen gac arr ddc add gets small cli 1、獲得當前應用包名 public static String getRunningActivityName(Context context) { ActivityManager acti
查看Android應用包名、Activity的幾個方法
local get edit pack too edi androidm shell mcu 一、沒有apk,應用已經安裝到手機或虛擬機中 1.logcat .清除logcat內容,使用命令adb logcat -c .啟動logcat,使用命令adb logcat Act
使用adb檢視android程式的包名以及棧頂的activity名
windows下進入cmd,定位路徑到adb.exe的路徑,然後使用命令: adb shell dumpsys activity | findstr "mFocusedActivity" 就能看到當前棧頂的activity名字了 如果adb shell命令出
adb獲取包名以及當前執行的activity
1.由包名獲取apk路徑 adb shell pm path io.ionic.starter 2.開啟需要獲取的APP,執行一下命令即可 adb shell dumpsys window | f
Android Studio下Ndk開發踩過的坑以及解辦法決
Android studio在2.2之後是開始相容ndk的開發,嚐鮮用來本地開發,各種坑,不相容。之前用得好好的,一個升級AS或者NDK版本都會一不小心導致了編譯失敗,或者成功之後,載入不成功。故隨手筆記記錄下自己踩過的坑,也方便其他人查詢。 Trap One :
Android開發之修改包名
開發過程中有時候會由於各種原因需要修改包名,網上有很多帖子,很多方法,不過他們都有一個共同的特點就是支援如下包名的修改:com.abc.def.cde修改成com.ccc.ddd.fff等等,他們修改的特點如下: 1.包名的長度不變。例如都是四級
PB獲取應用程式路徑以及exe名
一.宣告全域性或者區域性函式 Function uint GetModuleFileName(ulong hModule,ref string lpFilename,ulong nSize) Library "kernel32.dll" alias for "GetModu
就Android專案基本成型後,更換應用包名(package)的方法
起因 這裡本人也是第一次更改,由於之前一個APK專案裡面分了好幾個專案,導致有些功能不能同時使用,所以需要將一個APK同時安裝兩個(不同的專案)在手機上,因為應用開發者的問題也就是包名不能重複,不能同
Android檢視應用包名package和launcher_activity名稱的方法
** 方法一:使用sdk自帶工具aapt ** //aapt是sdk自帶的一個工具,在sdk\builds-tools\目錄下 1.以ES檔案瀏覽器為例,命令列中切換到aapt.exe目錄執行:aapt dump badging E:\apk\es3
Android NDK開發 native層獲取Surface並顯示影象 思路過程
import java.io.File;import java.io.FileInputStream;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Canvas;import android
Android----獲得當前應用包名、當前activity的名字、判斷是否是系統桌面、service類
public class FloatWindowService extends Service {/*** 用於線上程中建立或移除懸浮窗。*/private Handler handler = new Handler();/*** 定時器,定時進行檢測當前應該建立還是移除懸浮窗。*/private Timer
獲取僅有apk的應用包名與類名
在做android SDK開發的時候,為了配合運營需要獲取遊戲的apk包名。所以在網上查找了資料,可以通過命令列adb的方式獲取apk的包名和類名。具體操作如下 1.手機先運行遊戲或者應用 2.然後開啟
Android啟動一個只知道包名的應用
我們知道,要啟動一個應用,就需要知道應用啟動Activity的名稱,可是啟動Activity的ACTION引數,這樣就可以通過startActivity(Intent)來啟動,如: /**被啟動的應用的包名為com.xx.xx,應用的入口為com.xx.xx.TestLa
android studio 修改應用ID,應用包名
1、修改應用ID每一個App都必須有唯一的應用ID,如果兩個App的應用ID相同,同時安裝在一臺手機上的時候會報錯。修改一個App的應用ID,則視修改後的App為一個新的App。修改方法: 開啟 App module -> build.gradleapply plu
Android NDK 開發總結
設置 .text nbsp def runt 編寫 abi 文件的 targe 一.安裝配置環境 1.安裝Android Studio,下載路徑https://developer.android.com/studio/index.html?hl=zh-cn。我下載的是Win
android NDK開發中,用Cygwin調試本地代碼時報錯“Another debug session running,Use --force to kill it”原因及解決的方法
能夠 att cati kill 時報 andro 使用 deb gdb調試 在使用ndk-gdb調試的時候。運行$NDK/ndk-gdb --verbose報錯“Another debug session running,Use --force to kil
Android Studio開發獲取本地時間
import 自己 public ack info 聊天記錄 datetime AS IV 實現本地聊天記錄功能,用到獲取本地時間的函數,感覺比較實用,分享給大家! 1、在相應moudle的java文件夾下建立自己的util文件夾如·: 2、建立DateUtil類 pa