Is there a way to determine whether an Android application is signed for production or debug at runtime?

后端 未结 4 492
执念已碎
执念已碎 2021-02-06 15:33

Is there a way to determine whether an Android application is signed for production or debug at runtime?

4条回答
  •  谎友^
    谎友^ (楼主)
    2021-02-06 16:05

    private static Boolean isDebugBuild = null;
        protected boolean isDebugBuild() {
            if(isDebugBuild == null) {
                PackageManager pm = getPackageManager();
                try {
                    PackageInfo pi = pm.getPackageInfo(getPackageName(), 0);
                    isSignedWithDebugKey = (pi.applicationInfo.flags &
                        ApplicationInfo.FLAG_DEBUGGABLE) != 0;
                }
                catch(NameNotFoundException nnfe) {
                    nnfe.printStackTrace();
                    isDebugBuild = false;
                }
            }
    
            return isDebugBuild;
        }
    

    Since ADT 8, if you don't specifically add debuggable="true" to your manifest, debug builds will have it set to true, and exported / signed builds will have it set to false.

    It sounds like this is might be a more reliable method (as long as you don't manually set debuggable..) to determine if it is a debug vs release build, but not specifically if the certificate was a debug cert - which was your question, so my answer might not be relevant for you.

提交回复
热议问题