使用Android SDK在Eclipse中创建PhoneGap项目的问题

时间:2013-05-21 21:53:21

标签: java android eclipse cordova buildpath

我正在尝试使用Eclipse和PhoneGap构建一个Android应用程序,但我一直收到错误

[2013-05-21 17:47:39 - PhoneGapTest] Project has no target set. Edit the project properties to set one.
[2013-05-21 17:47:50 - PhoneGapTest] Parser exception for /PhoneGapTest/AndroidManifest.xml: Premature end of file.

......打开项目。我打开项目属性并设置目标,但xml异常仍然存在。我已经清理并构建了项目,卸载并重载了我的android SDK并更新了我的ADT,但都无济于事。 AndroidManifest.xml 为空。在Errors控制台中我有这个......

Archive for required library: 'E:/AndroidProjects/workspace/PhoneGapTest/libs/cordova-2.7.0.jar' in project 'PhoneGapTest' cannot be read or is not a valid ZIP file    Build Path Problem

啊,现在我看到项目中的cordova jar完全是空的。但这必须每次都发生,因为我已尝试在终端上使用PhoneGap create命令重建此项目100次。为什么会这样?

编辑 - 好的,现在我通过下载中的复制和粘贴直接添加cordova jar,但现在当我尝试从现有源创建android项目时,没有任何反应。该文件夹甚至没有显示在包资源管理器中。那么为什么PhoneGap命令行创建工具创建一个空AndroidManifest.xml和空cordova jar的项目,我甚至无法打开它?

编辑 - 好吧,我认为至少部分问题是我在某些环境变量中使用了空格,特别是Program Files。我现在用%PROGRAMFILES%变量来处理它,并且PhoneGap生成的目录现在有一个有效的cordova jar和{4}的AndroidManifest.xml文件。以下是使用PhoneGap创建命令行工具后AndroidManifest.xml的内容...

<?xml version="1.0" encoding="utf-8"?>
<!--
       Licensed to the Apache Software Foundation (ASF) under one
       or more contributor license agreements.  See the NOTICE file
       distributed with this work for additional information
       regarding copyright ownership.  The ASF licenses this file
       to you under the Apache License, Version 2.0 (the
       "License"); you may not use this file except in compliance
       with the License.  You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

       Unless required by applicable law or agreed to in writing,
       software distributed under the License is distributed on an
       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       KIND, either express or implied.  See the License for the
       specific language governing permissions and limitations
       under the License.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:windowSoftInputMode="adjustPan"
      package="com.gsu.PhoneGapTest" android:versionName="1.0" android:versionCode="1" android:hardwareAccelerated="true">
    <supports-screens
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:xlargeScreens="true"
        android:resizeable="true"
        android:anyDensity="true"
        />

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.RECORD_VIDEO"/>
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />   
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />   
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />


    <application android:icon="@drawable/icon" android:label="@string/app_name"
        android:hardwareAccelerated="true"
        android:debuggable="true">
        <activity android:name="PhoneGapTest" android:label="@string/app_name"
                android:theme="@android:style/Theme.Black.NoTitleBar"
                android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="17"/>
</manifest> 

...和cordova jar是251 KB,就像它应该的那样。现在这是奇怪的部分。在我使用现有代码创建Android项目之后,正如PhoneGap文档所指定的那样,AndroidManifest.xml的内容被删除,返回到0 KB,并且生成的.project文件也是空的。不仅如此,我仍然遇到同样的错误。这些在控制台上......

[2013-05-21 18:27:13 - PhoneGapTest] Project has no target set. Edit the project properties to set one.
[2013-05-21 18:27:14 - PhoneGapTest] Parser exception for /PhoneGapTest/AndroidManifest.xml: Premature end of file.

..(因为AndroidManifest是EMTPY才有意义),以及错误对话框中的这些......

Description Resource    Path    Location    Type
Archive for required library: 'E:/AndroidProjects/workspace/PhoneGapTest/libs/cordova-2.7.0.jar' in project 'PhoneGapTest' cannot be read or is not a valid ZIP file    PhoneGapTest        Build path  Build Path Problem

Parser exception for /PhoneGapTest/AndroidManifest.xml: Premature end of file.  PhoneGapTest        line 1  Android ADT Problem

The project cannot be built until build path errors are resolved    PhoneGapTest        Unknown Java Problem

Premature end of file.  AndroidManifest.xml /PhoneGapTest   line 1  Android XML Format Problem

编辑 - 好的,所以我创建项目的确切顺序(如果有帮助的话)如下......

  1. 导航至phonegap*/lib/android/bin并运行命令./create PhoneGapTest com.gsu.PhoneGapTest PhoneGapTest。此步骤的输出如下......

    创建新的android项目...... 复制模板罐... 复制js,jar和config.xml文件...... 复制cordova命令工具...... 更新AndroidManifest.xml和MainActivity ...

  2. 使用Android ADT启动Eclipse并导航至New > Project > Android > Android Project from Existing Code

  3. 浏览到我在步骤1中创建PhoneGapTest项目的工作区,选中copy project into workspace复选框(如果我不这样做,我会看到一个阅读invalid project description的消息框),点击完成。

  4. 现在,PhoneGapTest会出现在Project Explorer中,还会显示这些错误......

    [2013-05-22 15:36:10 - PhoneGapTest]项目没有设定目标。编辑项目属性以设置一个。 [2013-05-22 15:36:31 - PhoneGapTest] /PhoneGapTest/AndroidManifest.xml的解析器异常:文件过早结束。

  5. ...所以我点击了项目properties > Android > Project Build Target并选择了Android 4.2.2(这只是Google APIs这个唯一的选项)

    在这里我不知道如何处理AndroidManifest,因为它是emtpy。这似乎是问题的根源。当我从现有源构建Android项目时,AndroidManifest.xml会以某种方式变空。

2 个答案:

答案 0 :(得分:4)

好的,明白了。我正在使用我的Eclipse工作区内的PhoneGap create实用程序创建项目。显然,当你这样做,然后从现有的源eclipse副本和一个新的空AndroidManifest.xml文件创建项目,这是问题所在。我在我的文件系统中的其他位置使用create实用程序创建了项目,从Eclipse中的现有源创建项目并且选择copy project into workspace复选框,现在一切似乎都很好,原AndroidManifest.xml被保留。

答案 1 :(得分:0)

在Mac OS上,您应该使用

sudo ./create ....