如何让 Android 应用程序自动配置调试与发布值?

发布于 2024-10-04 14:52:38 字数 321 浏览 7 评论 0原文

我正在开发一款 Android 应用程序,特别是使用 Facebook Android SDK 的应用程序。在开发模式下,我正在使用一个使用一个 ID 的测试 Facebook 应用程序。但是,在发布模式下,该应用程序将与具有不同 ID 的第二个 Facebook 应用程序一起使用。

我想知道这里的大多数 Android(或 Java 可能是一个足够合适的知识领域)开发人员如何使用调试与发布值自动构建他们的应用程序。理想的解决方案在构建之前不涉及手动切换(例如:将 public static Final DEBUG = false; 切换到 true)。

I'm working on an Android app, specifically one that uses the Facebook Android SDK. In development mode, I'm working with a test Facebook app that goes by one ID. However, in release mode, the app will be working with second Facebook app with a different ID.

I'm wondering how most Android (or Java might be a suitable enough realm of knowledge) developers here go about having their app automatically build with debug vs. release values. An ideal solution does not involve a manual switch (e.g.: switching public static final DEBUG = false; to true) before building.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

×纯※雪 2024-10-11 14:52:38

你问这个问题已经有一段时间了,但我想我应该分享一下我是如何做的。

就像 Sebastian 暗示的那样,Ant 脚本可以为您处理该更改并生成您正在寻找的静态最终常量。您可以配置 IntelliJ 或 Eclipse 以使其几乎无缝。

我试图详细说明我在这里采取的不同步骤,如果可以的话请告诉我有帮助。我知道在发布之前我永远不需要进行任何手动更改,这是一个很好的缓解!

It's been a while since you asked but I thought I'd share how I'm doing it.

Like Sebastian hinted, an Ant script can handle that change for you and generate the static final constants that you're looking for. You can configure IntelliJ or Eclipse to make it almost seamless.

I tried to detail the different steps I took over here, let me know if it helps. I know I never have to make any manual changes before releasing, and it's a nice relief!

清晰传感 2024-10-11 14:52:38

在 eclipse ADT 17.0 及更高版本中,有一个新功能。检查使用您的代码自动构建的 BuildConfig.DEBUG。

有关详细信息,请参阅 http://developer.android.com/sdk/eclipse-adt.html

In eclipse ADT 17.0 and above there is a new feature for this. Check the BuildConfig.DEBUG that is automatically built with your code.

For more information see http://developer.android.com/sdk/eclipse-adt.html

终弃我 2024-10-11 14:52:38

我不推荐 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();
}

I can't recommend the IMEI method... the main problem with it is that not all Android devices will have IMEIs. A better way is to examine the signature used to sign the .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();
}
他不在意 2024-10-11 14:52:38

我使用稍微普通的方法(如果您仍然对解决方案感兴趣)。

在应用程序启动时,我的应用程序检查 /sdcard/ 中是否存在存储的文本文件。我的每个应用程序都会查找特定的文件,例如“applicationdebug.txt”。如果该文件存在,那么应用程序将进入调试模式,并开始使用详细的日志语句并使用我的调试 Facebook 密钥等。

然后我只需在设备上删除(或重命名)该文件即可查看应用程序在发布中的执行情况模式。

I use a slightly more mundane method (in case you're still interested in solutions).

At application launch my application checks for the existence of a text file stored in /sdcard/. Each application I have looks for a specific file like "applicationdebug.txt". If the file exists, then the application goes into debug mode and starts being verbose with log statements and using my debug Facebook key, etc.

Then I simply remove (or rename) the file to on the device to see how the application performs in release mode.

半岛未凉 2024-10-11 14:52:38

通常您只会使用 1 或 2 个设备进行调试。那么可以根据Devices来设置DEBUG开关吗?所以你可以简单地使用 IMEI。

  1. 向您的项目添加一个新的 Application 类并让它初始化该字段(怀疑将其放入 Const 类中)。

    在您的应用程序 onCreate 方法中,调用 Const.setupDebug(getApplicationContext());

  2. 像这样实现 setupDebug

    公共类常量{

    private static boolean debug = false;
    
    
    公共静态布尔 isDebug() {
        返回调试;
    }
    
    
    私有静态无效setDebug(布尔调试){
        const.debug = 调试;
    }
    
    
    私有静态字符串[] DEBUG_DEVICES = new String[] {
            "000000000000000", "gfjdhsgfhjsdg" // 添加你的设备
    };
    
    
    公共静态无效setupDebug(上下文上下文){
        Arrays.sort(DEBUG_DEVICES);
    
    
    
    TelephonyManager mTelephonyMgr = (TelephonyManager)
            context.getSystemService(Context.TELEPHONY_SERVICE);
    字符串 imei = mTelephonyMgr.getDeviceId();
    if (imei == null) imei = "000000000000000";
    
    
    if(Arrays.binarySearch(DEBUG_DEVICES, imei) > -1) {
        设置调试(真);
    }
    

    }

    }

  3. 从常量字段切换到常量方法。

    Const.isDebug()

Usually you will use 1 or 2 devices for debugging only. So you can set the DEBUG switch based on the Devices? So you can simply use the IMEI.

  1. add a new Application class to your project and have it initialize the field (suspect to put it in a Const class).

    In your Applications onCreate method, call Const.setupDebug(getApplicationContext());

  2. Implement the setupDebug like this

    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) > -1) {
        setDebug(true);
    }
    

    }

    }

  3. Switch from constant field to constant Method.

    Const.isDebug()

单挑你×的.吻 2024-10-11 14:52:38

使用 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 文件
生产特定配置
在values/refs.xml中,我添加了

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

我从该项目签名的APK以将其放在商店中

With Eclipse I create 3 projects in the workspace :

  • ApplicationProject

It is a library project
Contain all source code
In values/refs.xml I add

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

Use ApplicationProject
Overide AndroidManifest and other xml file with
developement specific config
In values/refs.xml I add

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

Use ApplicationProject
Overide AndroidManifest and other xml file with
production specific config
In values/refs.xml I add

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

I signe APK from this project to put on the store

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文