标签: package-info

Android 13 (SDK 33):PackageManager.getPackageInfo(String, int) 已弃用。还有什么选择呢?

从 API 级别 33 开始,getPackageInfo(String, int)PackageManager 类的方法已被弃用。文档建议改为使用getPackageInfo(String, PackageInfoFlags)。但该功能仅适用于 API 级别 33。

我当前的代码:

val pInfo = context.packageManager.getPackageInfo(context.packageName, 0)
Run Code Online (Sandbox Code Playgroud)

现在应该是这样吗?

val pInfo = context.getPackageInfo()

@Suppress("DEPRECATION")
fun Context.getPackageInfo(): PackageInfo {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        packageManager.getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(0))
    } else {
        packageManager.getPackageInfo(packageName, 0)
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-context package-info

62
推荐指数
2
解决办法
3万
查看次数

Android SDK 28 - PackageInfo中的versionCode已被弃用

我只是将我的应用程序升级compileSdkVersion28(Pie).

我收到了编译警告:

警告:不推荐使用PackageInfo中的[deprecation] versionCode

警告来自此代码:

final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
int versionCode = info.versionCode;
Run Code Online (Sandbox Code Playgroud)

我查看了文档,但它没有说明如何解决此问题或应该使用什么来代替不推荐使用的字段.

android package-info android-9.0-pie

21
推荐指数
4
解决办法
7000
查看次数

如何在 Flutter 中测试使用 package_info 的方法?

我正在编写一个 Flutter 插件,用于检查 Play Store 或 App Store 以查看应用程序是否需要更新。我正在使用该package_info包来确定用户拥有的应用程序版本。我的代码如下所示:

getVersionStatus() {
    PackageInfo packageInfo = await PackageInfo.fromPlatform();
    localVersion = packageInfo.version;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想测试这个方法,但如果它作为单元测试运行它,fromPlatform调用就会挂起并超时测试。有没有比传testing入布尔值更优雅的方法来解决这个问题?IE:

if (testing) {
    PackageInfo packageInfo = await PackageInfo.fromPlatform();
    localVersion = packageInfo.version;
} else {
    localVersion = '0.0.0'
}
Run Code Online (Sandbox Code Playgroud)

package_info包是否应该提供一种捕获错误的方法?有没有办法判断该方法是否正在由测试运行?

unit-testing dart package-info flutter

9
推荐指数
2
解决办法
1068
查看次数

有什么方法可以检测我可以/无法访问哪些应用程序的“应用程序信息”屏幕?

背景

您可以使用PackageManager.getInstalledPackages获取已安装应用程序的列表。

而且,您可以通过以下方式访问每个应用程序的应用程序信息屏幕:

val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:$appPackageName"))
startActivity(intent)
Run Code Online (Sandbox Code Playgroud)

例子:

在此处输入图片说明

问题

事情是,我注意到(在有人告诉我之后)对于某些应用程序,您无法访问他们的应用程序信息屏幕。这些应用程序的此类包名示例:“com.google.android.ext.services”(“Android 服务库”)、“com.google.mainline.tememetry”(“支持组件”)、com.google.android .modulemetadata”(主要组件)。也许更多。

向谷歌报告后,我被告知

com.google.android.ext.services 是主线模块,因此设置不提供详细的应用程序信息。

我试过的

我试图查看 PackageInfo 和 ApplicationInfo 的各个领域和功能。

我找到了“isApex”,但它似乎总是错误的,并且文档根本无法帮助理解它是什么(“包是否是 APEX 包”)。编辑:如果我检查 API 30,它总是假的。在 API 29 上,它实际上有时设置为真。报到这里

我还发现了一个名为 "coreApp" 的私有布尔字段(我可以通过反射访问),确实有时它是正确的,但并不总是如此,当它为真时,这意味着我无法访问它的应用程序信息屏幕。

这是获取它的代码:

    fun isProbablyCoreApp(packageInfo: PackageInfo): Boolean {
        return try {
            val field = PackageInfo::class.java.getField("coreApp")
            field.getBoolean(packageInfo)
        } catch (e: Throwable) {
            false
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题

  1. “主线模块”是什么意思?它是操作系统的一部分,可以自行更新?与Android 10及以上的“项目主线”相关?
  2. 为什么我无法访问其应用程序信息?这不是一个真正的应用程序?但如果没有,它怎么会被列为应用程序列表的一部分?
  3. 有什么方法可以检测已安装的应用程序实际上是一个您无法访问其应用程序信息屏幕的模块吗?操作系统的 UI 如何从其列表中过滤掉这些应用程序?
  4. 是否有更多我无法访问其应用信息屏幕的应用?

android android-applicationinfo package-info

7
推荐指数
1
解决办法
919
查看次数

多命名空间包信息 Java

我有这个包裹信息

/**
 * Created by mflamant on 13/02/2017.
 */
@javax.xml.bind.annotation.XmlSchema(namespace = "namespace1", xmlns = {@XmlNs(prefix = "ns4", namespaceURI = "namespace1")}, elementFormDefault = XmlNsForm.QUALIFIED)

package com.cisco.adt.portal.data.model.API.Equipment;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
Run Code Online (Sandbox Code Playgroud)

但我想要 2 个命名空间,但我尝试这样做:

/**
 * Created by mflamant on 13/02/2017.
 */
@javax.xml.bind.annotation.XmlSchema(namespace = "namespace1", xmlns = {@XmlNs(prefix = "ns4", namespaceURI = "namespace1")}, elementFormDefault = XmlNsForm.QUALIFIED)
@javax.xml.bind.annotation.XmlSchema(namespace = "namespace2", xmlns = {@XmlNs(prefix = "ns4", namespaceURI = "namespace2")}, elementFormDefault = XmlNsForm.QUALIFIED)

package com.cisco.adt.portal.data.model.API.Equipment;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
Run Code Online (Sandbox Code Playgroud)

但是我有一个错误:“重复注释”,这是否可能有 2 个命名空间?

谢谢你。

java xml namespaces package-info

6
推荐指数
1
解决办法
1万
查看次数

仅获取列表中已安装的应用程序(不是系统应用程序)

我正在使用以下代码实现代码以仅显示用户安装的应用程序(如 facebook)和一些更新的系统应用程序(如 Gmail、youtube 等)。但它也展示了一些其他应用程序。所以我的问题是删除这些类型的应用程序的方法是什么。

我的最终目标是显示应用程序列表,就像 Google Play 商店显示它们一样。

我已阅读这些解决方案: 获取已安装的 Android 应用程序列表

https://stacktips.com/tutorials/android/how-to-get-list-of-installed-apps-in-android

http://theopentutorials.com/tutorials/android/listview/how-to-get-list-of-installed-apps-in-android/

https://www.android-examples.com/get-list-installed-apps-package-name-icons/

https://inducesmile.com/android/android-list-installed-apps-in-device-programmatically/

packageManager = getPackageManager();

List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS);
List<PackageInfo> installedPackageInfo = new ArrayList<PackageInfo>();

for(PackageInfo pi: packageInfoList){
    if(!isSystemPackage(pi)){
          installedPackageInfo.add(pi);
    }
}
Run Code Online (Sandbox Code Playgroud)
boolean isSystemPackage(PackageInfo pkgInfo){
        if((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)!=0)
            return false;
        else if((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)!=0)
            return true;
        else if((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_INSTALLED)!=0)
            return false;
        else
            return true;

    }
Run Code Online (Sandbox Code Playgroud)

更新:我添加了显示一些不相关应用程序的图像。

在此输入图像描述 在此输入图像描述

android installed-applications package-info

6
推荐指数
0
解决办法
4966
查看次数

有没有一种方法可以在eclipse中一步创建现有软件包的package-info.java?

我有一些旧的软件包,没有package-info.java。由于某种原因,我需要package-info.javas为他们创建任务,我发现任务真的很无聊,因为在Eclipse中没有捷径可以做到这一点。我必须手动使用该New > File过程创建文件,然后手动键入那些软件包名称。

Eclipse中是否有执行此任务的捷径?

java eclipse package-info

5
推荐指数
2
解决办法
6551
查看次数

如何在 eclipse 中编辑默认的 package-info 模板

我只想在创建新包时检查Create package.info.java复选框,如下所示

@ParametersAreNonnullByDefault
package net.pkg.main.foo;

import javax.annotation.ParametersAreNonnullByDefault;
Run Code Online (Sandbox Code Playgroud)

但现在它看起来像这样

/**
 * @author myname
 *
 */
package net.pkg.main.foo;
Run Code Online (Sandbox Code Playgroud)

我的问题:有没有办法在 eclipse 中编辑默认的 package-info 模板?

提前致谢 <3 <3。

java eclipse templates package package-info

5
推荐指数
0
解决办法
203
查看次数

package-info.java +休眠注释@TypeDefs + Maven

如何在单独的package-info.java类上声明@TypeDefs并将其与@Type一起用于包级别。目前,我已经按照以下方式声明了它。但是,当我使用Maven编译应用程序时,它将出现以下错误。谢谢。

package-info.java类

@TypeDefs
        ({
                @TypeDef(
                        name="encryptedString",
                        typeClass=EncryptedStringType.class,
                        parameters={
                                @Parameter(name="encryptorRegisteredName",
                                        value="rcmHibernateStringEncryptor")
                        }
                )
        })

package com.core.model;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
import org.hibernate.annotations.Parameter;
import org.jasypt.hibernate4.type.EncryptedStringType;
Run Code Online (Sandbox Code Playgroud)

Maven错误

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project MyApp: Compilation failure
[ERROR] com\core\model\package-infor.java:[2,0] error: package annotations should be in file package-info.java
Run Code Online (Sandbox Code Playgroud)

java orm hibernate maven package-info

2
推荐指数
1
解决办法
1710
查看次数

Spring boot,runnable jar 无法加载 package-info.class

我们使用带有休眠数据库映射的 Spring Boot。实体包含映射为使用package-info.java文件定义的自定义类型的 JSON 列。

当我们从 Eclipse IDE 运行 spring-project 时,一切正常,我们可以调用我们的 Web 服务。

当我们生成一个可执行的 jar 并尝试调用我们的 Web 服务时,会引发以下错误:

mai 04, 2017 1:35:00 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.RuntimeException: Unable to execute job Test] with root cause
java.lang.NoClassDefFoundError: BOOT-INF/classes/com/test/package-info (wrong name: com/test/package-info)
    at java.lang.ClassLoader.defineClass1(Native Method)
Run Code Online (Sandbox Code Playgroud)

文件 package-info.class 进入 jar BOOT-INF/classes/com/test/package-info 有什么问题?

谢谢你的帮助

spring jar executable-jar spring-boot package-info

0
推荐指数
1
解决办法
2757
查看次数