应用程序未从清单中预期的 class 开始

Application not starting from expected class in manifest

我是 Android Studio 的新手,我正在尝试移植我在 Eclipse ADT 中的工作项目。

这是一个应用程序 (ArchPanoViewer),它依赖于两个库:Zxing _在 _ 和 PanoramaGL "lib_panorama" 中是 "captureActivity"。该应用程序的范围是在开始时显示一个对话框 window,然后当您按下按钮时启动条码扫描器 (MainActivity.java),然后通过 QRcode 检索的图像显示在全景视图中(PanoramaActivity.java).

这是通用项目结构:

ArchPanoViewer
|_ app
     |_com.example.admin.archpanoviewer
         |_MainActivity.java
         |_PanoramaActivity.java
|_captureActivity
|_lib_panorama

我在应用程序文件夹中有一个起始 class,名为:MainActivity.java。

这是我在使用 Eclipse 编程时使用的 "app" 清单文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.admin.archpanoviewer"
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<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.WRITE_SETTINGS" />

<application
    android:allowBackup="true"
    android:label="@string/app_name"
    tools:replace="icon"
    android:icon="@drawable/ic_launcher"
    android:theme="@style/AppTheme" >


<activity
    android:name="com.example.admin.archpanoviewer.MainActivity"
    android:configChanges="orientation|screenSize" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity
    android:name="com.google.zxing.client.android.CaptureActivity"
    android:screenOrientation="landscape"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
    android:windowSoftInputMode="stateAlwaysHidden" >

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>    //this part was deleted according to suggestions 

    <intent-filter>
        <action android:name="com.google.zxing.client.android.SCAN" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

<activity
    android:name="com.example.admin.archpanoviewer.PanoramaActivity"
    android:parentActivityName="com.example.admin.archpanoviewer.MainActivity"
    android:configChanges="orientation" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.admin.archpanoviewer.MainActivity" />
</activity>

</application>

Android Studio 中的问题是 MainActivity.java 被完全跳过,应用程序作为一个简单的条形码扫描仪启动,可以检索 QR,仅此而已。 它根本没有考虑 classes.

中编写的工作流程

在哪里可以指定应用程序的起点??应用程序抽屉中出现 2 个图标时,肯定存在某处冲突。提前致谢!

P.S。我不知道它们是否有用。但是这里还有 build.gradles:

build.gradle(整个项目):

 buildscript {
repositories {
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:1.0.0'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
}

allprojects {
repositories {
    jcenter()
}
}

build.gradle(应用):

apply plugin: 'com.android.application'

android {
compileSdkVersion 21
buildToolsVersion "21.1.2"

defaultConfig {
    applicationId "com.example.admin.archpanoviewer"
    minSdkVersion 8
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

 dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile project(':lib_panorama')
compile project(':captureActivity')
 }

build.gradle (Zxing)

apply plugin: 'com.android.library'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"

defaultConfig {
    minSdkVersion 7
    targetSdkVersion 21
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}

buildTypes {
    release {
        minifyEnabled true
        proguardFiles 'proguard-android-optimize.txt'
    }
}
}

dependencies {
}

build.gradle(全景图)

apply plugin: 'java'

dependencies {
compile files('libs/commons-httpclient-3.1.jar')
compile files('libs/android.jar')

}

我没有设法将 Zxing 作为一个简单的库导入为 panoramaGL..我有方法错误所以我放弃了。我希望这不是问题。

编辑 1

根据建议,我仔细检查了清单(上面突出显示的更新)并在 运行 应用 window 中发现了这一行:

 Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.admin.prova/com.google.zxing.client.android.CaptureActivity }

但 CaptureActivity 未设置为启动器..

考虑这 xml 部分

<activity
    android:name="com.example.admin.archpanoviewer.MainActivity"
    android:configChanges="orientation|screenSize" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />   <-------Here
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

你要开始的activity必须在MAIN这里,否则在DEFAULT

基本上,Intents 是 Android 中 activity 交流的一种方式。

每当一个 Intent 被触发时,它就会被一些 - activity 占用,它期待这个 Intent 并且 activity 响应这个 Intent。

现在,Android-runtime 如何通知应用程序的 activity 启动?好吧...通过发射 Intent。

基本上,这个意图被触发以启动应用程序的主要 activity。

<action android:name="android.intent.action.MAIN" />

所以......只有你的主activity应该听这个意图。

在您的应用中...所有活动都在监听这些意图...这意味着 "As far as they know... all of these are main activities."

另外...只有启动器-activity 应该处理此类目的。

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