因此,对于我的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>
答案 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.重启你的日食。
请记住,如果找不到您的资源,则显示此类型错误。
祝你好运!