2

プライベートベータテストとは異なるminSDKVersionをGooglePlayストアに(デバイスフィルタリングの目的で)持つ必要があります。私は次のことを試しました:

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>

これは、次のような適切なダンプバッジを除いて正常に機能します。

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

残念ながら、aaptダンプは残りをダンプしません。したがって、このエラー以外の出力はありません:-(

minSdkVersion参照を次のような文字列参照に変更すると、次のようになります。

AndroidManifest.xmlには、次のものが含まれています。

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

res / values / config.xmlはmavenによって生成され、次のものが含まれています。8

これでは、APIレベル16(Jelly Bean)のデバイスでAPKが許可されないため、アプリをインストールできません。

sdkVersion:'8'

aapt dump badgingによる)インストールする。エラーは次のとおりです:INSTALL_FAILED_OLDER_SDK

APKの作成中に文字列参照が何らかの形で誤って解釈されているようです。

リソースファイルからandroid:minSdkVersionを参照し、aaptでデバッグするにはどうすればよいですか?

aaptバージョンはAndroidToolsRev.20の0.2です。

4

2 に答える 2

3

adt-dev Googleグループで尋ねられたこの質問の重複に対する彼の応答でXavを引用します:

マニフェストのminsdkVersionでリソースを参照することはできません。

マニフェストの多くのものはリソースを参照できますが、明らかにminSdkVersionできません。

Xavは、スクリプトを使用してマニフェストを変更することを提案しています。もう1つのアプローチは、アプリの大部分をAndroidライブラリプロジェクトとしてパッケージ化し、ライブラリを使用する2つのアプリを作成することです。1つは2つの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"/>

それをfiltered/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 に答える