0

好的,所以我在这里阅读了关于这个臭名昭著的问题的 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 文件(在资产文件夹中),此错误就会返回,我必须再次创建一个新项目。

4

3 回答 3

1

我对所有 sdk 进行了更新,然后我得到了著名的“R can...”。原来在更新 sdk 的过程中,所有的构建工具都被删除了。检查“SDK Manager”是否已安装所有工具。

于 2013-05-21T08:31:25.013 回答
1

缺少 R.java 的原因可能是

  • 当你没有正确命名你的drawables时
  • 当您的布局出现问题时
  • 当您忘记在 AndroidManifest 文件中注册内容(活动等)时
  • 当清单和其他地方的包名冲突时
  • 有时多个包装可能会出现此问题

提示:查看控制台中的错误,看看它指的是哪里,那是唯一的线索!

事实:清理项目并不总是能解决问题

于 2013-01-22T10:52:38.450 回答
1

我认为您在构建 gen 时犯了一点错误 ..所以检查您的 xml 文件或生成的文件中是否有任何错误..

在清理和构建之后,如果它不工作,那么做简单的工作..

创建新项目复制代码和布局以及.png xml插件等甚至不删除gen文件夹然后

清理并构建运行项目后,它将工作

检查此链接以获得更多帮助

于 2013-01-22T10:54:13.107 回答