生成签名的APK遗失资源文件

时间:2017-06-10 16:05:34

标签: android google-maps android-studio google-play google-play-services

我正在生成一个我需要上传到Play商店的签名APK。我遇到的问题是我正在使用的地图使用自定义样式,我引用了Res>raw文件夹中的自定义样式。当我在手机上生成可调试APK /运行应用程序时,可以检索R.raw.mapstyle_grayscale文件。当我尝试生成已签名的APK时,我收到错误Error:(936, 98) error: cannot find symbol variable mapstyle_grayscale

我的代码如下所示:

Boolean success = false;
int map_version = manager.getMapVersion(this);
 switch (map_version){
     case 0:
         break;
     case 1:
         success = googleMap.setMapStyle(MapStyleOptions.loadRawResourceStyle(this, R.raw.mapstyle_grayscale));
         break;
     case 2:
         success = googleMap.setMapStyle(MapStyleOptions.loadRawResourceStyle(this, R.raw.mapstyle_night));
         break;
     case 3:
         success = googleMap.setMapStyle(MapStyleOptions.loadRawResourceStyle(this, R.raw.mapstyle_retro));
         break;     
 }

if (!success)
    Log.e("Maps", "Style parsing failed.");
else
    Log.i("Maps","Style parsing successful");

1 个答案:

答案 0 :(得分:0)

请检查您的build.gradle文件,看看您的minifyEnabledshrinkResources是否设置为true。如果minifyEnabledshrinkResources设置为true,则会在生成版本apk时删除未使用的资源。通常,从代码引用的资源可以被发现为未使用的资源,因此会出现问题。

如果您希望保留或丢弃特定资源,请在项目中使用<resources>标记创建XML文件,并指定要保留在tools:keep属性中的每个资源以及要放弃的每个资源tools:discard属性。两个属性都接受以逗号分隔的资源名称列表。您可以将星号字符用作通配符。请check here了解更多信息。

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"
    tools:discard="@layout/unused2" />

Developers guide for android提供了有关资源缩减的更多信息。