簡體   English   中英

如何在Android棒棒糖中以編程方式知道應用程序的進程是32位還是64位?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM