如何以编程方式访问Android OS的私有字符串?

时间:2013-03-26 11:02:01

标签: android string root private localizable.strings

背景

我想以编程方式获取Android操作系统的所有字符串(包括所有字符串),包括那些被视为私有的字符串。

例如,我想获取packageManager应用程序的那些,如找到here

问题

使用android.R.string只返回一小部分字符串。

我尝试了什么

我找到了this link,它显示了下一个代码,但我不确定要在参数中加入什么:

private String GetAttributeStringValue(Context context, AttributeSet attrs, String namespace, String name, String defaultValue) 
    {
        //Get a reference to the Resources
        Resources res = context.getResources();
        //Obtain a  String from the attribute
        String stringValue = attrs.getAttributeValue(namespace, name);
        //If the String is null 
        if(stringValue == null)
        {
            //set the return String to the default value, passed as a parameter
            stringValue = defaultValue;
        }
        //The String isn't null, so check if it starts with '@' and contains '@string/'
        else if( stringValue.length() > 1 && 
                 stringValue.charAt(0) == '@' && 
                 stringValue.contains("@string/") ) 
        {
            //Get the integer identifier to the String resource
            final int id = res.getIdentifier(context.getPackageName() + ":" + stringValue.substring(1), null, null);
            //Decode the string from the obtained resource ID
            stringValue = res.getString(id);
        } 
        //Return the string value
        return stringValue;
    }

我还注意到一个名为Android resources的应用程序可以执行此操作,但仅适用于某些字符串。找到其他私人资源也很不错。

问题

这样的事情可能吗?如果没有,是否可以用root进行?

1 个答案:

答案 0 :(得分:0)

您的链接显示如何从偏好设置屏幕获取资源并说:

 The goal of this example was to show how to obtain the correct String resource outside the Android XML namespace

链接描述了您可以通过其他方式获取资源,而不仅仅是通过R.string。

我使用另一个自定义命名空间和自定义按钮Label创建了一个演示项目,但遗憾的是我无法将字符串资源从一个项目显示到另一个项目。