1

我知道这不是第一次被问到这个问题,但我尝试了所有应该是解决方案但无济于事的事情。

  1. 删除 gen/bin 文件夹
  2. 干净的
  3. 布局不存在(确实存在,它在我的 res/layout 文件夹中)
  4. 不使用 android.R
  5. 其余的我忘记了,但你得到了图片......

这是情况。

我有一个 android 应用程序,在调试模式下工作正常,但是当我通过 ant 创建发布 apk时,android.content.res.Resources$NotFoundException: Resource ID #0x7f03004a当我在安装由 ant 构建生成的 apk 后尝试启动它时,抛出和异常。在我添加 android facebook3.5 sdk 之前,这并没有发生。

当我发布时,我通常只输入:

ant release-all

对应的 build.xml 如下所示(片段):

<target name="release-all">
    <record name="logfile.txt" action="start" append="false" />
    <taskdef resource="net/sf/antcontrib/antlib.xml">
        <classpath>
            <pathelement location="${antcontrib.dir}"/>
        </classpath>
    </taskdef>

    <for list="${unis}" param="uni">
        <sequential>
            <echo>Number @{uni}</echo>
            <var name="university.name" value="@{uni}"/>
            <echo>Building University Name ${university.name}</echo>
            <subant
                buildpath="build.xml"
                failonerror="true">
                <target name="clean" />
                <target name="release" />
            </subant>
            <echo>--------</echo>
            <echo>Copying files to dropbox</echo>
            <copy todir="${dropbox.dir}/<somepaththatiwillnotspecify>">
                <fileset dir="${out.absolute.dir}">
                    <include name="*release.apk"/>
                </fileset>
                <mapper type="glob" from="*release.apk" to="@{uni}.apk"/>
            </copy>
            <var name="university.name" unset="true"/>
        </sequential>
    </for>
    <record name="logfile.txt" action="stop"/>
</target>
4

3 回答 3

0

您是否尝试过调整 proguard.cfg 中的设置。当 proguard 混淆东西并且它包含不应该包含的项目时,我通常会得到这个。也许您可以尝试以下设置:

-dontwarn com.somenameoflibrary.** -keep class somenameoflibary.** { *; }

于 2013-09-18T00:03:22.427 回答
0

坚持了好几天,但终于找到了解决方案。我在 build.xml 中定义了一个目标(见下文)

<target name="-package-resources" depends="-crunch">
     <exec executable="${aapt}" failonerror="true">
        <arg value="package" />
        <arg value="-f" />
        <arg value="--auto-add-overlay" />
        <arg value="-M" />
        <arg path="${basedir}/AndroidManifest.xml" />
        <arg value="-S" />
        <arg path="${resource.absolute.dir}" />
        <arg value="-S" />
        <arg path="${basedir}/${android.library.reference.1}/res"/>
        <arg value="-A" />
        <arg path="${asset.absolute.dir}" />
        <arg value="-I" />
        <arg path="${android.jar}" />
        <arg value="-F" />
        <arg path="${out.absolute.dir}/${resource.package.file.name}" />
        <arg value="--rename-manifest-package" />
        <arg value="pokit.campus.${university.name}" />
    </exec>
</target>

和评论${basedir}/${android.library.reference.1}/res之前的那个-S。我只是取消了它的注释,事情就奏效了。我不太确定原因,但我认为取消注释是合乎逻辑的,因为我最近添加了 facebook-sdk 库,如您所知,在使用 facebook-sdk 之前该错误不存在。

于 2013-09-18T21:06:23.527 回答
0

在我的情况下,Project->Clean 和 ant clean 都不起作用。在我取消选择 jdk 并在 Preferences ->Installed JREs 下选择 jre 后,问题已修复

于 2014-05-25T17:58:00.827 回答