【问题标题】:"aapt dump badging" wants minSdkVersion to be a string but "adb install" needs it as an integer“aapt dump badging”希望 minSdkVersion 是一个字符串,但“adb install”需要它作为一个整数
【发布时间】:2012-10-08 15:19:24
【问题描述】:

我需要在 Google Play 商店中使用不同的 minSDKVersion(用于设备过滤目的),而不是用于私人 Beta 版测试。我尝试了以下方法:

AndroidManifest.xml 包含以下内容:

<manifest …>
[…]
    <uses-sdk android:minSdkVersion="@integer/minSdkVersion" android:targetSdkVersion="15"/>
[…]
</manifest>

res/values/config.xml由maven生成,包含以下内容:

<resources>
  <integer name="minSdkVersion">8</integer>
</resources>

这很好用,除了 aapt dump badging 抱怨:

ERROR getting 'android:minSdkVersion' attribute: attribute is not a string value

不幸的是,aapt dump 不会转储其余部分。所以除了这个错误我没有任何输出:-(

当我将 minSdkVersion 引用更改为这样的字符串引用时:

AndroidManifest.xml 包含以下内容:

<manifest …>
[…]
  <uses-sdk android:minSdkVersion="@string/minSdkVersion" android:targetSdkVersion="15"/>
[…]
</manifest>

res/values/config.xml 由 maven 生成,包含以下内容: 8

有了这个我无法安装应用程序,因为不知何故我的 API 级别 16 (Jelly Bean) 的设备不允许 APKs

sdkVersion:'8'

(根据aapt dump badging)被安装。错误是:INSTALL_FAILED_OLDER_SDK

在创建 APK 时,字符串引用似乎被误解了。

如何从资源文件中引用 android:minSdkVersion 并使用 aapt 对其进行调试?

aapt 版本是 Android Tools Rev. 20 的 0.2。

【问题讨论】:

    标签: android aapt android-sdk-tools


    【解决方案1】:

    在 adt-dev Google Group 上询问 his response to the dupe of this question 中的 Xav:

    您不能在清单的 minsdkVersion 中引用资源。

    虽然清单中的很多东西都可以引用资源,但显然minSdkVersion 不能。

    Xav 建议使用脚本来更改清单。另一种方法是将您的大部分应用程序打包为一个 Android 库项目,并创建两个使用该库的应用程序,一个使用您的两个 minSdkVersion 值中的每一个。

    【讨论】:

      【解决方案2】:

      由于我已经在使用 Maven 构建项目,因此我通过这种方式解决了问题:

      我将 AndroidManifest.xml 移动到名为:${project.basedir}/filtered 的文件夹中,并用属性引用替换了 AndroidManifest.xml 中的 minSdkVersion 值(我已经在 pom.xml 中有这个):${ project.property.minSdkVersion}:

      <uses-sdk android:minSdkVersion="${project.property.minSdkVersion}" android:targetSdkVersion="15"/>
      

      并将其从过滤后的/config.xml 中删除。然后我在 pom.xml 中添加了以下资源过滤指令:

      <project ...>
        ...
        <properties>
          <project.property.minSdkVersion>8</project.property.minSdkVersion>
        </properties>
       ...
       <build>
        <resources>
          <resource>
           <filtering>true</filtering>
           <directory>${project.basedir}/filtered</directory>
           <targetPath>${project.basedir}/</targetPath>
           <includes>
              <include>AndroidManifest.xml</include>
           </includes>
         </resource>
        </resources>
        ...
       </build>
       ...
      </project>
      

      这样过滤后的 AndroidManifest.xml 位于 Eclipse 期望的位置,并在调用 mvn process-resources 后替换了属性引用。在其他配置文件中,我对 ${project.property.minSdkVersion}

      有不同的值

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-02
        • 2012-09-20
        • 2013-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-10
        相关资源
        最近更新 更多