如何在运行时将元数据信息写入Android清单文件

3

我知道可以编辑Android清单组件,例如启用/禁用等。我想在运行时将meta值标签插入到Android清单的应用程序标记中。如何直接编写Android清单文档?

这是我想要直接写入我的应用程序Android清单的字符串:

<meta-data android:name="my_api_key" android:value="mykey124" />

并且它必须在应用程序标签中。

2个回答

5

您不能在运行时编辑清单文件。

如果您需要运行时解决方案,可以尝试其他方式,如共享首选项或可保存值的其他方式。

如果没有,请将其放入清单文件中,以Google Play服务为例:

<application>
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
    .....
</application>

为什么不能存储在其他地方? - Jintin
我想在通过谷歌审核后更改元值。 - j2emanue
告诉我如何更改。 - j2emanue
我认为你可以使用共享首选项作为替代方案。读取元值作为默认首选项值,并在需要时更改首选项。 - Jintin

0

我知道可能已经晚了,但这个答案可以对其他正在寻找的人有所帮助

首先 前往路径res > values > strings.xml并创建字符串资源

 <string name="my_api_key">Your_api_key</string>

然后前往 清单 文件

如果您想在应用程序或活动中添加此元标记,请确保您想要添加的位置。如果要添加到应用程序中,则只需在应用程序标记之后开始;如果要添加到活动中,则在要编写的活动标记之后开始。

   <meta-data
            android:name="apikey"
            android:value="@string/my_api_key" />

现在终于是时候检索应用程序或活动中插入的元数据了。
 try {
        ActivityInfo ai = getPackageManager().getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA);
        Bundle bundle = ai.metaData;
        if (bundle != null) {
            String apiKey = bundle.getString("apikey");
            Log.d(this.getClass().getSimpleName(), "apiKey = " + apiKey);

            }
        }
    } catch (PackageManager.NameNotFoundException e) {
        Utilities.log(this.getClass().getSimpleName(), "Failed to load meta-data, NameNotFound: " + e.getMessage());
    } catch (NullPointerException e) {
        Log.e(this.getClass().getSimpleName(), "Failed to load meta-data, NullPointer: " + e.getMessage());
    }

如果您已经在应用程序中放置了元标记,则使用:
 ApplicationInfo ai = getPackageManager().getApplicationInfo(this.getPackageName(), PackageManager.GET_META_DATA); 

只需要返回活动信息。


3
我想在运行时编辑元数据。您正在展示如何读取它。 - j2emanue
你实现了这个功能吗?我的意思是在运行时更改元数据。@j2emanue - yubaraj poudel
不行。看起来非常困难。 - j2emanue
1
在运行时没有办法编辑清单文件,但是你可以在构建项目的时候使用Gradle构建系统进行编辑。这是唯一可以进行编辑的地方。当应用程序已经构建完成后,清单文件就变成了一个常量。 - Dmitriy Mitiai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接