R无法解析为变量 - 一个新案例?

时间:2013-01-22 10:43:35

标签: android cordova build-error

好的,所以我在这里看到了关于这个臭名昭着的问题的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 Developer Tools来说,这个R.java实际上似乎是一个非常弱点 - 并且改进了与此相关的构建错误的处理(解释什么是错误的)似乎可以从优先级中获​​益。无论如何 - 我希望有人可以提供帮助!

更新:问题是由Subversion引起的。我不确定Subversion正在做什么导致这种情况,但每当我创建一个新项目并导入我的文件以使Eclipse编译项目时,一切正常。然后,每当我在Subversion中执行某些操作时,例如添加/删除/提交/更新HTML,CSS或Javascript文件(在assets文件夹中),此错误将返回,我必须再次创建一个新项目。

3 个答案:

答案 0 :(得分:1)

缺少R.java的

原因可能是

  • 如果您没有正确命名您的drawables
  • 当您的布局出现问题时
  • 当您忘记在AndroidManifest中注册内容(活动等)时 文件
  • 当清单和其他包装名称发生冲突时 地方
  • 有时候会出现多个太平洋问题

提示:查看控制台中的错误并查看它引用的位置,这是唯一的潜在客户!!

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

答案 1 :(得分:1)

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

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

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

在清理和构建运行项目之后,它将起作用

查看此link以获取更多帮助

答案 2 :(得分:1)

我对所有sdk进行了更新,然后我得到了着名的“R不能......”。 事实证明,在更新sdk期间已删除所有构建工具。 检查“SDk Manager”是否已安装所有工具。