Android 生成已签名的APK缺少资源文件
我正在生成一个签名的APK,需要上传到play store。我遇到的问题是,我使用的地图使用了自定义样式,并且我引用了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
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
。