一、在PackageManagerService中对是否是system app的判断,具有ApplicationInfo.FLAG_SYSTEM标记的,被视为System app。
二、测试app
package com.giada.android_demo;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = getApplicationContext();
Log.v("android_demo","is com.giada.android_demo system app? "+isSystemApplication(context,"com.giada.android_demo"));
Log.v("android_demo","is com.android.phone system app? "+isSystemApplication(context,"com.android.phone"));
}
public static boolean isSystemApplication(Context context, String packageName){
PackageManager mPackageManager = context.getPackageManager();
try {
final PackageInfo packageInfo = mPackageManager.getPackageInfo(packageName, PackageManager.GET_CONFIGURATIONS);
if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)!=0){
return true;
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return false;
}
}
三、运行效果,可以根据包名判断是否为system app。