应用程序未从清单中预期的 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" />
我是 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" />