Android:manifest targetSdkVersion 更改导致:图标不可见,小部件不再工作,并且无法访问数据

Posted

技术标签:

【中文标题】Android:manifest targetSdkVersion 更改导致:图标不可见,小部件不再工作,并且无法访问数据【英文标题】:Android: manifest targetSdkVersion change resulted in: icon not visible, widget no longer works, and cannot access data 【发布时间】:2011-01-29 20:13:53 【问题描述】:

我最近升级了我的 android 应用以支持多种分辨率。以前,我的 Android.manifest 文件有一行:

为了支持多种密度和分辨率设备,我将其更改为:

<supports-screens
 android:smallScreens="false"
 android:normalScreens="true"
 android:largeScreens="true"
 android:anyDensity="true"
/>
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4" />

然后我添加了几个新目录,例如 drawable-hdpi-v4 和 drawable-long-hdpi-v4,其中包含高分辨率版本的图形。就是这样。

自发布此更新以来,已经有相当多的用户抱怨各种问题:

应用图标没有出现(我没有创建高分辨率版本的图标)

主屏幕小部件不再工作,即使他们删除并重新添加它(此代码未随更新而更改)。我有一个用户向我发送了他们的错误日志,其中显示:

03-19 20:59:41.617 W/ActivityManager( 1854): Unable to launch app com.alt12.babybump/10078 for broadcast Intent action=android.appwidget.action.APPWIDGET_UPDATE flags=0x4 comp=com.alt12.babybump/com.alt12.babybump.WidgetGirl (has extras) : process is bad

我现有的小部件代码中有一个可能相关的可疑部分:

@Override
 public void onReceive(Context context, Intent intent) 

  // v1.5 fix that doesn't call onDelete Action
  final String action = intent.getAction();
  if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) 
   final int appWidgetId = intent.getExtras().getInt(
     AppWidgetManager.EXTRA_APPWIDGET_ID,
     AppWidgetManager.INVALID_APPWIDGET_ID);
   if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) 
    this.onDeleted(context, new int[]  appWidgetId );
   
   else 
   super.onReceive(context, intent);
  
 

也许最麻烦的是:the sqlite database is no longer accessible/writeable for some users so their data is no longer available。我确实在清单中添加了WRITE_EXTERNAL_STORAGE 权限。这只发生在某些用户身上,而且往往是 HTC Eris 用户。在该错误日志中,我看到如下内容:

03-19 16:00:56.173 E/FlurryAgent( 4791): java.io.FileNotFoundException: /data/data/com.alt12.babybump/files/.flurryagent.-2333f5cb
03-19 16:00:56.173 E/FlurryAgent( 4791): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:231)

03-19 16:01:09.393 E/Database( 4791): sqlite3_open_v2("/data/data/com.alt12.babybump/databases/uitematmamad.db", &handle, 6, NULL) failed
03-19 16:01:09.393 W/System.err( 4791): android.database.sqlite.SQLiteException: unable to open database file

好像更新引起了新进程,无法访问旧进程的数据,什么的。

任何帮助表示赞赏!

【问题讨论】:

【参考方案1】:

这个组合搞砸了:

然后我添加了几个新目录,例如 drawable-hdpi-v4 和 drawable-long-hdpi-v4,其中包含高分辨率版本的图形。

删除 drawable--v4 目录并将图形放在 drawable- 文件夹中..这将修复您的图形

关于其他错误..您检查过摩托罗拉安卓开发者论坛了吗?

【讨论】:

以上是关于Android:manifest targetSdkVersion 更改导致:图标不可见,小部件不再工作,并且无法访问数据的主要内容,如果未能解决你的问题,请参考以下文章

Android manifest之manifest标签详细介绍

Android manifest文件中的标签详细介绍

找不到 manifest-merger.jar (com.android.tools.build:manifest-merger:26.0.1)

Android MANIFEST.MF 等效项

Android Manifest 中的 versionCode 与 versionName

以编程方式从 android 中的 manifest.xml 检索权限