需要通过正则表达式判断给定字符串是否是合法的包名,网上找了几个,都有一定的缺陷,比如类似com会通过验证,或者com.a.也会通过验证等,于是自己完善了一下。

Android合法包名规约

  1. 只能包含大小写英文字母、数字、下划线、句点(.)
  2. 以句点分割称为“段”,必须至少包含2个段,且不能有空段(即不能以句点开头或者结尾)
  3. 每个段必须以英文字母开头,不能以数字或下划线开头

完整的正则表达式

^([a-zA-Z_][a-zA-Z0-9_]*)+([.][a-zA-Z_][a-zA-Z0-9_]*)+$

示例代码(这里的入参是一个File对象):

private boolean isPkg(File file) {boolean isPkg = false;if (file != null && file.isDirectory()) {// Java/Android合法包名,可以包含大写字母、小写字母、数字和下划线,用点(英文句号)分隔称为段,且至少包含2个段,隔开的每一段都必须以字母开头Pattern pattern = Pattern.compile("^([a-zA-Z_][a-zA-Z0-9_]*)+([.][a-zA-Z_][a-zA-Z0-9_]*)+$");Matcher matcher = pattern.matcher(file.getName());isPkg = matcher.matches();}return isPkg;}

判断是否系统应用

private boolean isSystemApp(String pkgName) {boolean isSystemApp = false;PackageInfo pi = null;try {PackageManager pm = getApplicationContext().getPackageManager();pi = pm.getPackageInfo(pkgName, 0);} catch (Throwable t) {Log.w(TAG, t.getMessage(), t);}// 是系统中已安装的应用if (pi != null) {boolean isSysApp = (pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1;boolean isSysUpd = (pi.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 1;isSystemApp = isSysApp || isSysUpd;}return isSystemApp;}

更多相关文章

  1. 关于menu
  2. Android(安卓)use custom html tag in TextView
  3. android实现对导航Tab设置下划线选中效果
  4. android Textview加下划线
  5. EditText背景 光标 下划线颜色
  6. android TextView如何设置字体下划线
  7. Android(安卓)Jni 学习实战之(一)
  8. 高通平台短信里面含有中文和ftp开头的网址不能解析
  9. Android(安卓)dex加密与解密 application替换

随机推荐

  1. android studio 导入.so文件
  2. 转-Android原生(Native)C(JNI/NDK)开发之
  3. Android中gravity与layout_gravity的区别
  4. 怎样速写五官?人物速写五官教程
  5. Jenkins之Maven的配置
  6. 程序员开发环境下载及设置教程
  7. html基础:html前端环境部署
  8. 开始学习大前端的若干问题
  9. markdown基本语法以及简单案例
  10. markdown的实际应用