java - ActivityManager : Exception thrown when launching activities java. lang.IllegalArgumentException : val. 长度 > 91

标签 java android android-activity

在启动应用程序的 MainActivity 时,它会立即崩溃。当我查看 adb 日志时,我只能找到这个,

Exception thrown when launching activities in ProcessRecord
  java.lang.IllegalArgumentException: val.length > 91
  at SystemProperties.set

当我查看android的源代码时,我发现这可能是问题的根源Android Source Code Of SystemProperties.java .它包含的最大值限制为 91。

    public static final int PROP_VALUE_MAX = 91; 
    public static String get(String key) { 
        if (key.length() > PROP_NAME_MAX) { 
            throw new IllegalArgumentException("key.length > " + PROP_NAME_MAX); 
        } 
        return native_get(key); 
    } 

当我猜测时,我发现,我的应用程序的包名称是 108 个字符 长。当我将应用的包名称更改为 60 个字符时,它可以正常工作。

可能是什么问题? 这只发生在 Asus Zenfone 2 (Lolipop 5.0) 型号上。

其他设备没有问题。由于这个问题,我们收到了很多负面评价。

Our app already have 15K downloads in the play store. so changing the app's package name is not an option for me. Please help

更新

更准确地说,有

除了华硕 Zenfone 系列以外,我们测试的所有安卓手机都没有问题

正如@ViswanathLekshmanan 在评论中提到的,我将 MainAcitivity.java 文件的位置更改为较低的路径。

即,原始完整包名是:- “com.fourbigbrothers.malayalam_troll_greetings_maker_edit_movie_images_font_seasonal_photo_comments.activities.MainActivity”

我将其更改为:- “com.fourbigbrothers.mtm.activities.MainActivity”

还是不行。我在 onCreate of MainActivity 中放了一些日志,但代码执行根本没有到达那里。所以我不知道在哪里放置一些答案中提到的 try/catch block 。

是否有任何使用 android ndk 的解决方案?对不起,如果这是一个愚蠢的问题,我完全迷路了。

这是 list 的相关部分

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.fourbigbrothers.malayalam_troll_greetings_maker_edit_movie_images_font_seasonal_photo_comments" >

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
    android:name="com.fourbigbrothers.boilerplate.base.FbbApplication"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.FbbApp" >
    <activity
        android:name="com.fourbigbrothers.malayalam_troll_greetings_maker_edit_movie_images_font_seasonal_photo_comments.activities.MainActivity"
        android:label="@string/launcherActivityName"
        android:screenOrientation="portrait"
        android:launchMode="singleTop"
        android:theme="@style/MainActivityTheme" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />

        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
    </activity>
</application>

最佳答案

第一眼

属性系统是android上的一个重要功能。它作为服务运行并管理系统配置和状态。所有这些配置和状态都是属性。属性是一个键/值对,两者都是字符串类型。 从功能上看,它与windows注册表非常相似。许多 android 应用程序和库直接或间接依赖此功能来确定其运行时行为。例如,adbd 进程查询属性服务以检查它是否在模拟器中运行。另一个例子是 java.io.File.pathSeparator返回存储在属性服务中的值。

属性系统的工作原理

属性系统的高层架构如下所示。

enter image description here

关于你的问题。

我强烈建议你走过建议的answer . 为什么?

看看property_service.h .这是一个在你执行时会调用的类 SystemProperties.set native 方法。如果您尝试设置 native_set(key,val) 您将不会得到肯定的结果,因为 is_legal_property_name方法,在 native 级别检查属性规则。

When I give it a guess, i found that, my application's package name is 108 characters long. And when I changed my app's package name to 60 characters, it worked without any problem.

只是猜测。关注 SystemProperties就像 Android 中的 SharedPreference 类似物。您不需要将 Activity 的完整路径设置为 key .只需输入一个名称。或者带有前缀或类似的东西。

更新

经过多次搜索,我找到了 source native SystemProperties 文件。他还定义了92作为的最大长度和32作为 key 的最大长度。所以这是对Linux底层的限制。 你只能通过剪掉你的key来解决这个问题。值(在您的情况下为 <package_name> .MainActivity)

对于 future 的搜索:

http://rxwen.blogspot.com/2010/01/android-property-system.html

关于java - ActivityManager : Exception thrown when launching activities java. lang.IllegalArgumentException : val. 长度 > 91,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36820170/

相关文章:

java - 我可以为 Android 制作 HTML5 游戏吗?

java - 将 null 值作为参数传递给方法时如何修复 NullPointerException

android - 获取Android中动态添加的LinearLayouts的高度

android - android应用程序可以只有广播接收器和没有 Activity 的服务吗

java - Java 中的 C 静态变量行为

android - 在 ScrollView 中添加固定按钮,即使在滚动时也可见

android - 使用 AppCompat 将 Material 外观引入首选项的最佳实践?

service - Android:应用程序可见时如何运行服务?

Android:如果有来电,我的 Activity 会怎样?

java - Java中获取 "cmd.exe"的输出流