Android& Unity3D - Unity生成了R.java?

时间:2014-05-15 19:21:39

标签: java android android-layout unity3d r.java-file

因此,对于我的Unity游戏,我正在制作一个简单的插件来展示广告。我使用线性布局显示广告。在Unity之外,我可以使用线性布局让广告正常工作。在Unity中(经过适当的更改后,我的活动扩展了UnityPlayerActivity),我的游戏活动一直运行直到它到达这一行:

LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout);

我的activity_main.xml中有linearLayout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">  
</LinearLayout>

在插件/ Android中放置res / layout / activity_main.xml不能解决任何问题。我怀疑问题是我的Unity应用程序在其R.java中找不到linearLayout。我不知道怎么做,所以Unity使用linearLayout构建R.java。我该怎么办?

编辑:我已经确认linearLayout确实在Unity生成的R.java中:

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int app_icon=0x7f020000;
    }
    public static final class id {
        public static final int linearLayout=0x7f060000;
    }
    public static final class integer {
        public static final int google_play_services_version=0x7f050000;
    }
    public static final class layout {
        public static final int activity_main=0x7f030000;
    }
    public static final class string {
        public static final int app_name=0x7f040000;
    }
}

因此,当调用该单行时,其他东西正在崩溃我的应用程序。但是什么?

编辑2:

以下是我每次尝试运行应用程序时LogCat的样子(当我尝试运行时它会立即关闭)

  

05-15 14:12:35.223:E / jdwp(20666):将b-req发送到调试器失败:管道损坏(-1 of 89)

     

05-15 14:12:35.253:W / dalvikvm(20666):VFY:无法解决静态问题   Lcom / mycompany / mygame / R $ id;

中的字段5143(linearLayout)      

05-15 14:12:35.253:D / dalvikvm(20666):VFY:替换操作码0x60 at   0x0023

     

05-15 14:12:35.283:D / dalvikvm(20666):试图加载lib   /mnt/asec/com.mycompany.mygame-1/lib/libmain.so 0x31957170

     

05-15 14:12:35.283:D / dalvikvm(20666):添加了共享库   /mnt/asec/com.mycompany.mygame-1/lib/libmain.so 0x31957170

     

05-15 14:12:35.363:D / OverrideActivity(20666):onCreate叫......   ...

     

05-15 14:12:35.363:D / OverrideActivity(20666):我到目前为止! 1

     

05-15 14:12:35.363:D / OverrideActivity(20666):我到目前为止! 2 ^

     

05-15 14:12:35.363:D / AndroidRuntime(20666):关闭虚拟机

     

05-15 14:12:35.363:W / dalvikvm(20666):threadid = 1:线程退出   未捕获的异常(group = 0x313c61f8)

     

05-15 14:12:35.363:D / AndroidRuntime(20666):来自cmdline的procName:   com.mycompany.mygame

     

05-15 14:12:35.363:E / AndroidRuntime(20666):在writeCrashedAppName中,   pkgName:com.mycompany.mygame

     

05-15 14:12:35.363:D / AndroidRuntime(20666):文件写成功   内容:com.mycompany.mygame StringBuffer:   ; com.mycompany.mygame

以下是MainActivity.java的样子:

package com.mycompany.mygame;

import android.os.Bundle;
import android.util.Log;
import com.unity3d.player.UnityPlayerActivity;
import android.widget.LinearLayout;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;

public class MainActivity extends UnityPlayerActivity {

private static final String AD_UNIT_ID = "ca-app-pub-3778961516243228/8122389190";
private AdView adView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // call UnityPlayerActivity.onCreate()
    super.onCreate(savedInstanceState);
    // print debug message to logcat
    Log.d("OverrideActivity", "onCreate called... ... ...");
    newAd();
}

void newAd() {
    Log.d("OverrideActivity", "I got this far! 1");

    // Create ad view
    adView = new AdView(this);
    adView.setAdSize(AdSize.BANNER);
    adView.setAdUnitId(AD_UNIT_ID);

    Log.d("OverrideActivity", "I got this far! 2^");

    // Add the AdView to the view hierarchy. No size until ad is loaded.
    LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout);

    Log.d("OverrideActivity", "I got this far! 2.5");

    layout.addView(adView);

    Log.d("OverrideActivity", "I got this far! 3");

    AdRequest adRequest = new AdRequest.Builder().build();

    Log.d("OverrideActivity", "I got this far! 4");

    adView.loadAd(adRequest);

    Log.d("OverrideActivity", "I got this far! 5");
}

void killAd() {
    adView.destroy();
}
} 

我的插件/ Android中的清单:

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mycompany.mygame">

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATS"/>

    <application android:icon="@drawable/app_icon" android:label="@string/app_name">

<activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

<activity android:name="com.mycompany.mygame.MainActivity"
          android:label="@string/app_name"
          android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

 

2 个答案:

答案 0 :(得分:0)

错误是显而易见的,原因很简单,没有布局指定的表单findViewById()将获得linearlayout。如果你在R中看到了“在”id“字段中的linearlayout但是程序不能访问它是因为你没有加载存在这个id(linearlayout)的xml文件,而且它应该在调用findViewById()之前。

尝试这个因为我猜你需要添加一个新的LinearLayout,

一个。因此,您需要执行LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout);

之类的操作,而不是LinearLayout dynamicLinear=new LinearLayout(this);dynamicLinear.setOrientation(LinearLayout.VERTICAL);int id=1234;dynamicLinear.setId(id);dynamicLinear.addView(adView);

OR

B中。替换LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout);     与setContentView(R.layout.activity_main);LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout);我假设你在activity_main.xml中有了linearLayout id我也只能看到R文件中的dat布局,所以我就这样说了。

希望这可以解决您的问题...

THX

答案 1 :(得分:0)

我不确定 现在你可以先走一步了。如 1.删​​除Android.R(在您的活动中的上方) 2.或者替换package.R,例如com.example.name.R 3.检查res文件夹或子文件夹资源。如布局属性是否正确。 4.删除gen和bin文件夹。 5.清理你的项目:project =&gt; clean 6.重启你的日食。

请记住,如果找不到您的资源,则显示此类型错误。

祝你好运!