创建同一个Android应用程序的多个自定义版本

时间:2015-04-15 14:56:59

标签: android xml eclipse

我正在尝试为不同的客户创建我的应用的多个版本,并完成了以下步骤:

- 使用简单的复制并粘贴在查找程序中复制所有文件夹,

- 打开我刚刚创建的项目,

更改AndroidManifest.xml中的包名称,

- 重构失败的所有类和文件(使用重构选项),

清除项目并运行。

我已经能够在设备中安装2个应用程序,但每次我尝试运行任何应用程序时,操作系统都会向我显示:

enter image description here

如您所见,我安装并运行了2个应用程序:

enter image description here

enter image description here

enter image description here

每次按下按钮再次问我:

enter image description here

这是第一个AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="epinom.jm.smarthotel"
    android:versionCode="1"
    android:versionName="1.0" >

   <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="16" />

    <permission android:name="epinom.jm.smarthotel.maps.googlev2.permission.MAPS_RECEIVE"
        android:protectionLevel="signature">

    </permission>

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="epinom.jm.smarthotel.maps.googlev2.permission.MAPS_RECEIVE"/>


    <uses-feature android:glEsVersion="0x00020000"
                  android:required="true"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/MyTheme" >

        <meta-data android:name="com.google.android.gms.version"
               android:value="@integer/google_play_services_version" />

        <meta-data android:name="com.google.android.maps.v2.API_KEY"
               android:value="AIzaSyBjg8TtFgJTMuLFyiGlScVuEDNPjJnLxyM"/>

        <activity
            android:name=".SplashActivity"
            android:label="@string/title_activity_home"
            android:screenOrientation="portrait"
            android:launchMode="singleTask" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

         <activity
            android:name=".vcMainScreen"
            android:label="@string/title_activity_home"
            android:screenOrientation="portrait"
            android:launchMode="singleTask" >
            <intent-filter>
                <action android:name="vcMainScreen" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>

</manifest>

这是第二个AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="goSmart.guestperience.MoncloaDeSanLazaro"
    android:versionCode="1"
    android:versionName="1.0" >

   <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="16" />

    <permission android:name="goSmart.guestperience.MoncloaDeSanLazaro.maps.googlev2.permission.MAPS_RECEIVE"
        android:protectionLevel="signature">

    </permission>

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="goSmart.guestperience.MoncloaDeSanLazaro.maps.googlev2.permission.MAPS_RECEIVE"/>


    <uses-feature android:glEsVersion="0x00020000"
                  android:required="true"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/MyTheme" >

        <meta-data android:name="com.google.android.gms.version"
               android:value="@integer/google_play_services_version" />

        <meta-data android:name="com.google.android.maps.v2.API_KEY"
               android:value="AIzaSyDNqe1PO7pvZLtba_Vu3m5BvmOdJtqhU0M"/>

        <activity
            android:name=".SplashActivity"
            android:label="@string/title_activity_home"
            android:screenOrientation="portrait"
            android:launchMode="standard" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

         <activity
            android:name=".vcMainScreen"
            android:label="@string/title_activity_home"
            android:screenOrientation="portrait"
            android:launchMode="standard" >
            <intent-filter>
                <action android:name="vcMainScreen" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我从Android开发开始,所以请告诉我我做错了什么,有什么我不想配置。

我在Mac上使用Eclipse。

通过@David的问题,这是我用来调用每个新屏幕的代码:

String IntentName = Util.getController(buttons
        .getJSONObject(arg2)
        .getString("ViewController"));

Intent intento = new Intent(IntentName);

intento.putExtra(
        "jsonConfig",
        buttons.getJSONObject(arg2).getString(
                "JsonConfigFile"));
intento.putExtra("title", buttons.getJSONObject(arg2)
        .getString("Label"));
intento.putExtra("icon", buttons.getJSONObject(arg2)
        .getString("ImageIconTitle"));

startActivity(intento);

2 个答案:

答案 0 :(得分:1)

你有2个同名的活动....在不同的应用程序中。

更改1个活动的名称。

答案 1 :(得分:0)

感谢Nimish Choudhary和更多Google的评论,我的问题的答案是我必须为2个应用程序创建唯一的所有活动名称。

所以在AndroidManifest.xml中,我更改了所有活动的所有名称,即:

     <activity
        android:name="app1.vcMainScreen"
        android:label="@string/title_activity_home"
        android:screenOrientation="portrait"
        android:launchMode="standard" >
        <intent-filter>
            <action android:name="app1.vcMainScreen" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

我在调用函数时更改了开关的返回值:

    Util.getController(buttons
            .getJSONObject(arg2)
            .getString("ViewController")

现在的回报是:

    switch (Integer.parseInt(num)) {
    case 0:
        return "app1.vcMainScreen";
    default:
        return null;
    }

我希望有一天能帮助别人。

感谢所有人。