好的,所以我在这里阅读了关于这个臭名昭著的问题的 10 个其他线程,并尝试了所有可能的解决方案 - 没有任何运气。
我有一个几个月前工作的 Phonegap 项目,现在必须创建一个新版本。所以,在我的新 Mac 上 - 我不再可以使用旧 Mac,我检查了我用来制作以前构建的代码(所以实际代码不会有任何问题,因为它没有改变)。由于我的新 Mac 没有安装 Eclipse,我下载了 Android SDK 并发现它带有预配置的 Eclipse 版本,所以我使用了它。
为了安全起见,我已经安装了所有的 SDK 版本。可悲的是,我必须以 Android 2.3.3 为目标,最低版本为 2.1。我已确保在项目中正确配置了它。
“res”文件夹下的所有 .xml 和 .png 文件都有有效的小写名称。XML 文件中没有错误,至少 Eclipse 没有抱怨其中的任何内容 - 就像我上面所说的,自上次成功构建应用程序以来,XML 文件没有改变。
我已确保 Android 开发者工具的权限是正确的(每个人都有读取权限)。
我已删除“gen”文件夹并尝试再次构建。我已经做了无数次“干净”。我已经无数次地重新启动了 Eclipse。
我已确保包名称在任何地方都同步。我确保我在任何地方都没有“import android.R”。
每次 Eclipse 尝试构建时都会创建“gen”文件夹,但它不包含 R.java 文件,它只包含文件 BuildConfig.java,该文件除了包声明之外还包含以下内容:
public final class BuildConfig {
public final static boolean DEBUG = true;
}
我的 res/values/strings.xml 文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World</string>
<string name="app_name">My App Name</string>
</resources>
我的 res/xml/plugins.xml 文件包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<plugins>
<plugin name="App" value="com.phonegap.App"/>
<plugin name="Geolocation" value="com.phonegap.GeoBroker"/>
<plugin name="Device" value="com.phonegap.Device"/>
<plugin name="Accelerometer" value="com.phonegap.AccelListener"/>
<plugin name="Compass" value="com.phonegap.CompassListener"/>
<plugin name="Media" value="com.phonegap.AudioHandler"/>
<plugin name="Camera" value="com.phonegap.CameraLauncher"/>
<plugin name="Contacts" value="com.phonegap.ContactManager"/>
<plugin name="Crypto" value="com.phonegap.CryptoHandler"/>
<plugin name="File" value="com.phonegap.FileUtils"/>
<plugin name="Network Status" value="com.phonegap.NetworkManager"/>
<plugin name="Notification" value="com.phonegap.Notification"/>
<plugin name="Storage" value="com.phonegap.Storage"/>
<plugin name="Temperature" value="com.phonegap.TempListener"/>
<plugin name="FileTransfer" value="com.phonegap.FileTransfer"/>
<plugin name="Capture" value="com.phonegap.Capture"/>
<plugin name="EncapPlugin" value="no.encap.securitytoken.phonegap.plugin.EncapPlugin" />
</plugins>
我的 res/layout/main.xml 文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
</LinearLayout>
我已经尝试过更改fill_parent
上面match_parent
的内容,因为我读到其中一个答案已被重命名为 API 版本 8 中的答案 - 但这没有帮助。无论如何,我也需要支持 API 的第 7 版。以防万一,我尝试按照说明更改名称并将最低版本设置为 8,但这并没有帮助。
Eclipse 在尝试构建时不会生成其他错误,并且只会生成一个良性且不相关的警告。
我的 AndroidManifest.xml 文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="no.encap.securitytoken.phonegap"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" /><supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true" />
<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.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:icon="@drawable/icon"
android:label="@string/app_name" >
<activity
android:name="EncapMain"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity><activity
android:name="com.phonegap.DroidGap"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name" >
<intent-filter>
</intent-filter>
</activity>
</application>
</manifest>
由于这是一个 PhoneGap 应用程序,XML 文件实际上只包含启动和运行 WebView 所需的最低限度。
有人知道这里有什么问题吗?对于 Android 开发者工具来说,这个 R.java 的东西确实看起来是一个非常薄弱的点——并且改进了与此相关的构建错误的处理(解释什么是错误的)似乎可以从优先考虑中受益。无论如何-我希望有人可以提供帮助!
更新:问题是由 Subversion 引起的。我不确定 Subversion 到底在做什么导致这种情况,但是每当我创建一个新项目并导入我的文件以让 Eclipse 编译该项目时,一切正常。然后,每当我在 Subversion 中执行某些操作时,例如添加/删除/提交/更新 HTML、CSS 或 Javascript 文件(在资产文件夹中),此错误就会返回,我必须再次创建一个新项目。