[英]How to know a process of an app is 32-bit or 64-bit programmatically in Android lollipop?
眾所周知,Android 5.0.64 位支持是存在的。 我有一個非常簡單的問題。 我們可以以編程方式檢查任何應用程序正在以何種模式運行,即 32 位還是 64 位? 例如:我在 Nexus 9 上運行 Facebook 應用程序,如果 Facebook 應用程序的進程在 32 位模式或 64 位模式下運行,我可以使用我的 android 應用程序檢查嗎?
在 Nexus 5x 中
String arch = System.getProperty("os.arch");
返回
armv8l
它不是aarch64
,我的代碼aarch64
了。 然而,
root@bullhead:/ # uname -m
aarch64
root@bullhead:/ # getprop ro.product.cpu.abilist
arm64-v8a,armeabi-v7a,armeabi
有線。 所以我改變了我的代碼
boolean is64 = (android.os.Build.VERSION.SDK_INT >= 21) && System.getProperty("ro.product.cpu.abilist").contains("64");
更新於 2016-02-11
在三星三星 Galaxy S5 Neo,Android 5.1.1
String arch = System.getProperty("os.arch");
返回aarch64
但它不是 64 位設備!!!
ro.product.cpu.abilist
返回armeabi-v7a,armeabi
bool is64Bit = System.getProperty("ro.product.cpu.abilist").contains("64");
檢查是唯一的檢查方法。
嘗試System.getProperty("os.arch")
。 我還沒有在 64 位 android 上嘗試過,但如果是 64 位設備,它必須返回類似“aarch64”的東西。
http://developer.android.com/reference/java/lang/System.html#getProperty(java.lang.String)
根據我的經驗(如果您的 minSdkVersion >= 21),最好的方法是檢查數組 Build.SUPPORTED_64_BIT_ABIS 的大小。 (見https://developer.android.com/reference/android/os/Build#SUPPORTED_64_BIT_ABIS )
像這樣的東西:
public static boolean is64Bit() {
return (Build.SUPPORTED_64_BIT_ABIS!= null && Build.SUPPORTED_64_BIT_ABIS.length >0);
}
是什么讓您認為您的設備不是 64 位的? 這款手機的規格表明它使用的是Exynos 7 Octa 7580 ,它是 arm8 和 64 位。
boolean is64Arch = Build.CPU_ABI.equalsIgnoreCase("x86_64") || Build.CPU_ABI.equalsIgnoreCase("arm64-v8a");
public static boolean is64Bit() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//Added in API level 23
return Process.is64Bit();
}
try {
Class cls = Class.forName("dalvik.system.VMRuntime");
Method getRuntimeMethod = cls.getDeclaredMethod("getRuntime");
Object vmRuntime = getRuntimeMethod.invoke(null);
Method is64BitMethod = cls.getDeclaredMethod("is64Bit");
Object is64Bit = is64BitMethod.invoke(vmRuntime);
if (is64Bit instanceof Boolean) {
return (boolean) is64Bit;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
IMO,您可以使用reflect 來獲取is64Bit 的結果。 Android 6.0 開始提供這個api來檢查你的進程。
android.os.Process.is64Bit()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.