2011-01-12 20 views
3


2つのAPI、Production
ためQAのための1つ(テストとデバッグ)と他の私はデバッグのためにQA APIを実行する必要があります(私たちは日食を使用して作成した)とProduction APIがありますコードを変更せずにマーケットapkを作成します。それは、デバッグAPKまたは現在実行されている市場apkであるかどうかを使用してコードをチェックする方法はありますか?または、マニフェストで設定できるもの
ありがとう区別市場のAPKとデバッグAPK

答えて

1

これは、Antがあなたを助けることができるところです。私は常にEclipseを使ってデバッグバージョンを作成し、リリースバージョンにAntを使用しています。主にそれぞれ別のGoogle Maps APIキーが必要なためです。私はmain.xmlの2つのバージョン、すなわちdebugmain.xmlとreleasemain.xmlを持っています。私はコピー-REL-メインに依存するように、リリースターゲットの依存関係を変更し

<target name="check-release_main"> 
    <available file="${layout.dir}/releasemain.xml" property="releasemain.present" /> 
</target> 


<target name="-copy-rel-main" depends="check-release_main" if="releasemain.present"> 
    <echo message="Hit copy rel main" /> 
    <copy file="${layout.dir}/releasemain.xml" tofile="${layout.dir}/main.xml" overwrite="true"/> 
</target> 

<target name="release" depends="clean, -copy-rel-main....... 

私は、build.xmlの中で、リリースターゲットを変更して、2つの余分なターゲットを追加しましたそして、リリース対象の最後にバックデバッグバージョンにmain.xmlを上書きするmain.xmlのデバッグバージョンをコピーし

...... 
    <echo message="Copying the debugmain.xml back to main.xml" /> 
    <echo message="ALWAYS LEFT IN DEBUG FROR ECLIPSE" /> 
    <copy file="${layout.dir}/debugmain.xml" tofile="${layout.dir}/main.xml" overwrite="true" /> 

</target> 

あなたは、いくつかの特定のテキストや色を持っているあなたのバージョンを適応させることができデバイス上で実行されているバージョンを示すエレメントのいずれか

1

アプリに署名すると、デバッグモードで署名することができます。リリースする準備ができたら、署名を変更することができます。ここでは、あなたの文字列と一緒にあなたのXMLファイルにブール値を格納することができますSigning Your Application

+0

これは本当に質問に答えないと思います。 OPは、デバッグモードとプロダクションモードで異なるAPIを公開する必要があります。電話機は、両方のバージョンを同じように扱いますが、実際に署名されたバージョンからデバッグモードの署名付きバージョンに自動更新されることはありません。 – MatrixFrog

+0

私はこのninjasenseとMatrixFrogがあなたの問題を正しく理解していることを知っています。 –

1

のGoogleドキュメントからのより多くのです:

<resources> 
    <bool name="debug">true</bool> 
</resources> 

をしてからthis.getResources().getBoolean(R.debug)を使用してコードでアクセス(thisアクティビティや他のですコンテキスト)。ほとんどの場合、trueのままにしてから、リリース用にfalseに設定してください。

+0

ありがとうMatrixFrog。これは私が今試みた方法です。しかし、リリースファイルの値を自動的に変更する設定ファイルなどがあります。 –

+1

私はあなたがプログラムでそれを切り替えるビルドスクリプトを書くことができると思いますが、それ以外は私が知っているものではありません。あなたはそれがデバッグモードになっているときにDEBUG MODEという言葉がどこにでも現れるようにして、間違ったバージョンをリリースすることはまずありません。 – MatrixFrog

0

あなたのアプリの署名をプログラムでチェックすることもできます。私は、バージョン情報を記録する技術を使用します。

final byte[] officalkey = {-58, -42, -44, -106, 90, -88, -87, -88, -52, -124, 84, 117, 66, 79, -112, -111, -46, 86, -37, 109}; 
final byte[] officaldebugkey = {-99, -69, 45, 71, 114, -116, 82, 66, -99, -122, 50, -70, -56, -111, 98, -35, -65, 105, 82, 43}; 

Signature raw = c.getPackageManager().getPackageInfo(c.getPackageName(), PackageManager.GET_SIGNATURES).signatures[0]; 
CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
X509Certificate cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(raw.toByteArray())); 
MessageDigest md = MessageDigest.getInstance("SHA-1"); 
byte[] der = cert.getEncoded(); 
md.update(der); 
byte[] digest = md.digest(); 


if (Arrays.equals(digest, officalkey)) 
    apksign = c.getString(R.string.official_build); 
else if (Arrays.equals(digest, officaldebugkey)) 
    apksign = c.getString(R.string.debug_build); 
else 
    apksign = c.getString(R.string.built_by,cert.getSubjectX500Principal().getName()); 
関連する問題