Android 生成已签名的APK缺少资源文件

Android 生成已签名的APK缺少资源文件,android,google-maps,android-studio,google-play,google-play-services,Android,Google Maps,Android Studio,Google Play,Google Play Services,我正在生成一个签名的APK,需要上传到play store。我遇到的问题是,我使用的地图使用了自定义样式,并且我引用了Res>raw文件夹中的自定义样式。当我在手机上生成可调试的APK/运行应用程序时,可以检索R.raw.mapstyle\u grayscale文件。当我试图生成一个有符号的APK时,我得到了错误错误:(936,98)错误:找不到符号变量mapstyle\u grayscale 我的代码如下所示: Boolean success = false; int map_version

我正在生成一个签名的APK,需要上传到play store。我遇到的问题是,我使用的地图使用了自定义样式,并且我引用了
Res>raw
文件夹中的自定义样式。当我在手机上生成可调试的APK/运行应用程序时,可以检索
R.raw.mapstyle\u grayscale
文件。当我试图生成一个有符号的APK时,我得到了错误
错误:(936,98)错误:找不到符号变量mapstyle\u 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");

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

如果要保留或放弃特定资源,请在项目中创建一个带有
标记的XML文件,并在
工具:保留
属性中指定要保留的每个资源,以及在
工具:放弃
属性中指定要放弃的每个资源。这两个属性都接受以逗号分隔的资源名称列表。您可以将星号字符用作通配符。请查看更多信息

<?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" />

有更多关于资源缩减的信息

更新:


我在定制签名过程中遇到了类似的问题。问题是,我正在解压apk并签署一些库文件,然后再次解压apk。当再次压缩apk时,资源文件被压缩,因此在签名的apk中缺少对资源文件的引用。希望这些信息对未来的开发者有所帮助。

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

如果要保留或放弃特定资源,请在项目中创建一个带有
标记的XML文件,并在
工具:保留
属性中指定要保留的每个资源,以及在
工具:放弃
属性中指定要放弃的每个资源。这两个属性都接受以逗号分隔的资源名称列表。您可以将星号字符用作通配符。请查看更多信息

<?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" />

有更多关于资源缩减的信息

更新:


我在定制签名过程中遇到了类似的问题。问题是,我正在解压apk并签署一些库文件,然后再次解压apk。当再次压缩apk时,资源文件被压缩,因此在签名的apk中缺少对资源文件的引用。希望这些信息对未来的开发者有所帮助。

minifyEnabled设置为false shrinkResources也为false,我已尝试将其设置为true并添加上述XML,但生成的错误仍然相同。请将
build.gradle
proguard rules.pro
。minifyEnabled设置为false shrinkResources也设置为false,我已尝试将其设置为true并添加上述XML,但生成的错误仍然相同。请将您的
build.gradle
proguard rules.pro