簡體   English   中英

如何使Android應用程序自動配置調試與發布值?

[英]How to make Android app automatically configure w/ debug vs. release values?

我正在開發Android應用程序,特別是使用Facebook Android SDK的應用程序。 在開發模式中,我正在使用一個帶有一個ID的測試Facebook應用程序。 但是,在發布模式下,該應用程序將使用具有不同ID的第二個Facebook應用程序。

我想知道大多數Android(或Java可能是一個適當的知識領域)開發人員如何讓他們的應用程序自動構建調試與發布值。 在構建之前,理想的解決方案不涉及手動切換(例如:切換public static final DEBUG = false;true )。

你提問已經有一段時間,但我想我會分享我是怎么做的。

就像塞巴斯蒂安暗示的那樣,Ant腳本可以為你處理這個變化,並生成你正在尋找的靜態最終常量。 您可以配置IntelliJ或Eclipse以使其幾乎無縫。

我試着詳細說明我在這里采取的不同步驟,讓我知道它是否有幫助。 我知道在發布之前我永遠不需要做任何手動更改,這是一個很好的解脫!

在eclipse ADT 17.0及更高版本中,有一個新功能。 檢查使用您的代碼自動構建的BuildConfig.DEBUG。

有關更多信息,請參閱http://developer.android.com/sdk/eclipse-adt.html

我不推薦使用IMEI方法......主要問題是並非所有Android設備都有IMEI。 更好的方法是檢查用於簽署.apk的簽名。

// See if we're a debug or a release build
try {
    PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
    if (packageInfo.signatures.length>0) {
        String signature = new String(packageInfo.signatures[0].toByteArray());
        isReleaseBuild = !signature.contains("Android Debug");
    }
} catch (NameNotFoundException e1) {
    e1.printStackTrace();
}

我使用一種稍微平凡的方法(如果你仍然對解決方案感興趣)。

在應用程序啟動時,我的應用程序檢查是否存在/ sdcard /中存儲的文本文件。 我在每個應用程序中查找特定文件,如“applicationdebug.txt”。 如果該文件存在,則應用程序進入調試模式並開始使用日志語句和使用我的調試Facebook密鑰等詳細信息。

然后,我只需將文件移除(或重命名)到設備上即可查看應用程序在發布模式下的執行情況。

使用Eclipse,我在工作區中創建了3個項目:

  • ApplicationProject

它是一個庫項目包含所有源代碼在values / refs.xml中我添加

<bool name="debug_mode">true</bool>
  • ApplicationProjectDEBUG

使用ApplicationProject覆蓋AndroidManifest和其他xml文件以及開發特定配置在values / refs.xml中我添加

<bool name="debug_mode">true</bool>
  • ApplicationProjectPROD

使用ApplicationProject覆蓋AndroidManifest和其他具有生產特定配置的xml文件在值/ refs.xml中我添加

<bool name="debug_mode">false</bool>

我從這個項目signe APK到商店

通常,您將僅使用1或2個設備進行調試。 那你可以根據設備設置DEBUG開關嗎? 所以你可以簡單地使用IMEI。

  1. 在項目中添加一個新的Application類並讓它初始化該字段(懷疑將它放在一個Const類中)。

    在Applications onCreate方法中,調用Const.setupDebug(getApplicationContext());

  2. 像這樣實現setupDebug

    public class Const {

     private static boolean debug = false; public static boolean isDebug() { return debug; } private static void setDebug(boolean debug) { Const.debug = debug; } private static String [] DEBUG_DEVICES = new String[] { "000000000000000", "gfjdhsgfhjsdg" // add ur devices }; public static void setupDebug(Context context) { Arrays.sort(DEBUG_DEVICES); 
     TelephonyManager mTelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String imei = mTelephonyMgr.getDeviceId(); if (imei == null) imei = "000000000000000"; if(Arrays.binarySearch(DEBUG_DEVICES, imei) &gt; -1) { setDebug(true); } 
    \n\n }\n

    }

  3. 從常量字段切換到常量方法。

    Const.isDebug()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM