2

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

AndroidManifest.xml 包含以下内容:

<manifest …&gt;
[…]
    <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 …&gt;
[…]
  <uses-sdk android:minSdkVersion="@string/minSdkVersion" android:targetSdkVersion="15"/>
[…]
</manifest>

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

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

sdkVersion:'8'

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

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

我该怎么做才能从资源文件中引用 android:minSdkVersion 并使用 aapt 对其进行调试?

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

4

2 回答 2

3

引用 Xav 在他对 adt-dev Google Group 上提出的这个问题的欺骗的回答中:

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

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

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

于 2012-10-08T16:20:59.980 回答
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} 有不同的值

于 2012-10-08T22:45:16.863 回答