设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间01 现在时间01 缓存数据 当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

查看: 537|回复: 0

Android Studio获取配置资源与第三方包信息的方法

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:204
  • 打卡月天数:0
  • 打卡总奖励:3126
  • 最近打卡:2023-08-27 02:46:59
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
384
主题
350
精华
0
金钱
4235
积分
760
注册时间
2022-12-22
最后登录
2025-9-8

发表于 2025-9-8 12:44:12 | 显示全部楼层 |阅读模式
一、获取资源文件中的配置


1. 获取颜色值

res/values/colors.xml 中定义:
  1. <color name="colorPrimary">#3F51B5</color>
  2. <color name="colorAccent">#FF4081</color>
复制代码
获取方法





Java 中获取:
  1. // 获取颜色值(int类型,包含alpha通道)
  2. int color = getResources().getColor(R.color.colorPrimary, getTheme());

  3. // 兼容旧版本
  4. int color = ContextCompat.getColor(context, R.color.colorPrimary);
复制代码




Kotlin 中获取:
  1. // 直接扩展函数方式
  2. val color = ContextCompat.getColor(context, R.color.colorPrimary)

  3. // 或使用资源扩展
  4. val color = context.getColor(R.color.colorPrimary)
复制代码
2. 获取字符串

res/values/strings.xml 中定义:
  1. <string name="app_name">MyApplication</string>
  2. <string name="welcome_message">Hello, %s!</string>
复制代码
获取方法
Java 中获取:
  1. // 获取普通字符串
  2. String appName = getResources().getString(R.string.app_name);

  3. // 获取带参数的字符串
  4. String welcomeMsg = getResources().getString(R.string.welcome_message, "John");
复制代码
Kotlin 中获取:
  1. // 获取普通字符串
  2. val appName = resources.getString(R.string.app_name)

  3. // 获取带参数的字符串
  4. val welcomeMsg = getString(R.string.welcome_message, "John")
复制代码
3. 获取尺寸值

res/values/dimens.xml 中定义:
  1. <dimen name="padding_medium">16dp</dimen>
复制代码
获取方法
Java 中获取:
  1. // 获取像素值(会自动将dp/sp转换为px)
  2. float padding = getResources().getDimension(R.dimen.padding_medium);

  3. // 获取精确像素值(不进行四舍五入)
  4. float paddingExact = getResources().getDimensionPixelSize(R.dimen.padding_medium);
复制代码
Kotlin 中获取:
  1. val padding = resources.getDimension(R.dimen.padding_medium)
  2. val paddingExact = resources.getDimensionPixelSize(R.dimen.padding_medium)
复制代码
4. 获取整型/布尔值

res/values/integers.xml 中定义:
  1. <integer name="max_count">10</integer>
  2. <bool name="is_debug">true</bool>
复制代码
获取方法
Java 中获取:
  1. int maxCount = getResources().getInteger(R.integer.max_count);
  2. boolean isDebug = getResources().getBoolean(R.bool.is_debug);
复制代码
Kotlin 中获取:
  1. val maxCount = resources.getInteger(R.integer.max_count)
  2. val isDebug = resources.getBoolean(R.bool.is_debug)
复制代码
5. 获取数组

res/values/arrays.xml 中定义:
  1. <string-array name="planets_array">
  2.     <item>Mercury</item>
  3.     <item>Venus</item>
  4.     <item>Earth</item>
  5. </string-array>

  6. <integer-array name="numbers_array">
  7.     <item>1</item>
  8.     <item>2</item>
  9.     <item>3</item>
  10. </integer-array>
复制代码
获取方法
Java 中获取:
  1. String[] planets = getResources().getStringArray(R.array.planets_array);
  2. int[] numbers = getResources().getIntArray(R.array.numbers_array);
复制代码
Kotlin 中获取:
  1. val planets = resources.getStringArray(R.array.planets_array)
  2. val numbers = resources.getIntArray(R.array.numbers_array)
复制代码
二、获取应用包信息


1. 获取当前应用信息


Java/Kotlin 通用方法:
  1. // 获取包信息
  2. PackageManager pm = context.getPackageManager();
  3. String packageName = context.getPackageName();

  4. try {
  5.     PackageInfo packageInfo = pm.getPackageInfo(packageName, 0);
  6.    
  7.     // 应用版本信息
  8.     String versionName = packageInfo.versionName;
  9.     int versionCode = packageInfo.versionCode; // 注意: 新API中使用long类型的versionCode
  10.    
  11.     // 应用名称
  12.     String appName = pm.getApplicationLabel(packageInfo.applicationInfo).toString();
  13.    
  14.     // 应用图标
  15.     Drawable appIcon = pm.getApplicationIcon(packageName);
  16.    
  17. } catch (PackageManager.NameNotFoundException e) {
  18.     e.printStackTrace();
  19. }
复制代码
Kotlin 简化版:
  1. val pm = context.packageManager
  2. val packageName = context.packageName

  3. try {
  4.     val packageInfo = pm.getPackageInfo(packageName, 0)
  5.    
  6.     val versionName = packageInfo.versionName
  7.     val versionCode = packageInfo.longVersionCode // 注意使用longVersionCode
  8.    
  9.     val appName = pm.getApplicationLabel(packageInfo.applicationInfo).toString()
  10.     val appIcon = pm.getApplicationIcon(packageName)
  11.    
  12. } catch (e: PackageManager.NameNotFoundException) {
  13.     e.printStackTrace()
  14. }
复制代码
2. 获取其他应用信息
  1. // 检查应用是否安装
  2. boolean isAppInstalled = isPackageInstalled("com.example.app", context);

  3. public static boolean isPackageInstalled(String packageName, Context context) {
  4.     try {
  5.         context.getPackageManager().getPackageInfo(packageName, 0);
  6.         return true;
  7.     } catch (PackageManager.NameNotFoundException e) {
  8.         return false;
  9.     }
  10. }

  11. // 获取已安装应用列表
  12. List<ApplicationInfo> apps = context.getPackageManager().getInstalledApplications(0);
  13. for (ApplicationInfo appInfo : apps) {
  14.     String appName = appInfo.loadLabel(context.getPackageManager()).toString();
  15.     String packageName = appInfo.packageName;
  16.     Drawable icon = appInfo.loadIcon(context.getPackageManager());
  17.     // 处理应用信息...
  18. }
复制代码
三、获取第三方依赖包信息


1. 使用 BuildConfig 获取依赖版本

Gradle 会自动为每个依赖库生成 BuildConfig 类,可以获取版本信息:
  1. // 获取Gson库版本
  2. String gsonVersion = com.google.gson.BuildConfig.VERSION_NAME;

  3. // 获取Glide库版本
  4. String glideVersion = com.bumptech.glide.BuildConfig.VERSION_NAME;
复制代码
2. 通过 PackageManager 获取依赖信息
  1. // 获取所有已安装包信息
  2. List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);

  3. for (PackageInfo packageInfo : packages) {
  4.     if (packageInfo.packageName.startsWith("com.google.") ||
  5.         packageInfo.packageName.startsWith("com.facebook.")) {
  6.         // 这是Google或Facebook的库
  7.         String packageName = packageInfo.packageName;
  8.         String versionName = packageInfo.versionName;
  9.         int versionCode = packageInfo.versionCode;
  10.     }
  11. }
复制代码
3. 使用反射获取内部信息(不推荐,仅作了解)
  1. try {
  2.     Class<?> clazz = Class.forName("com.some.library.internal.Version");
  3.     Field versionField = clazz.getField("VERSION");
  4.     String version = (String) versionField.get(null);
  5. } catch (Exception e) {
  6.     e.printStackTrace();
  7. }
复制代码
四、动态获取资源ID

有时我们需要根据资源名称动态获取资源ID:
  1. // 获取资源ID
  2. public static int getResourceId(Context context, String resourceName, String type) {
  3.     return context.getResources().getIdentifier(resourceName, type, context.getPackageName());
  4. }

  5. // 使用示例
  6. int colorId = getResourceId(context, "colorPrimary", "color");
  7. int stringId = getResourceId(context, "app_name", "string");
  8. int drawableId = getResourceId(context, "ic_launcher", "drawable");
复制代码
五、主题属性获取

从当前主题获取属性值:
  1. // 创建一个TypedArray
  2. TypedArray typedArray = context.getTheme().obtainStyledAttributes(new int[]{R.attr.colorPrimary});

  3. try {
  4.     // 获取颜色值
  5.     int colorPrimary = typedArray.getColor(0, Color.BLACK);
  6. } finally {
  7.     typedArray.recycle();
  8. }
复制代码
六、多语言资源获取

获取特定语言环境的资源:
  1. // 创建特定Locale的Configuration
  2. Configuration config = new Configuration(resources.getConfiguration());
  3. config.setLocale(new Locale("es")); // 西班牙语

  4. // 创建新的Context
  5. Context localizedContext = context.createConfigurationContext(config);

  6. // 使用新Context获取资源
  7. String localizedString = localizedContext.getResources().getString(R.string.welcome_message);
复制代码
最佳实践建议


  • 资源获取优化

    • 避免在循环中频繁获取资源
    • 在Activity/Fragment生命周期早期获取常用资源并缓存

  • 空值处理

    • 总是检查资源是否存在
    • 为getString()等方法提供默认值

  • 性能考虑

    • 使用ContextCompat等兼容类确保向后兼容
    • 注意TypedArray使用后必须recycle()

  • 安全性

    • 处理获取其他应用信息时的权限问题
    • 不要暴露敏感信息在BuildConfig中

  • 资源命名规范

    • 使用一致的命名约定(如colorPrimary, text_heading等)
    • 避免硬编码资源ID

通过以上方法,可以灵活地从Android应用的配置文件中获取各种资源,并获取应用及第三方库的包信息,为应用开发提供更多可能性。
以上就是Android Studio获取配置资源与第三方包信息的方法的详细内容,更多关于Android Studio配置资源与第三方包信息的资料请关注晓枫资讯其它相关文章!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表