Я создал очень простой читатель RSS-каналов. На данный момент это очень просто. Одна из проблем, с которыми я столкнулся, заключается в том, что приложение не работает на Android, если это не сборка разработки.Приложение Unity работает на сборке разработки, а не на обычном
RSS-канал должен выводить фид в виде графического интерфейса. Он делает это в редакторе Unity и в сборке ПК. Но он работает на сборке Android только в том случае, если он установлен как сборка разработки, иначе он просто показывает ярлык «RSS Reader», который жестко закодирован как графический интерфейс.
Ошибок нет, это не сбой и не зависание, что действительно странно.
Я думаю, что проблема в настройке. Когда я заставляю установку занимать больше времени, она работает даже без сборки разработки. Но я не уверен, что это за проблема.
Вот соответствующий скрипт:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using System.Xml;
public class rsstester : MonoBehaviour
{
public GameObject newsItemObject;
XmlTextReader rssReader;
XmlDocument rssDoc;
string feedUrl = "http://feeds.reuters.com/Reuters/worldNews?format=xml";
void Start() {
rssReader = new XmlTextReader (feedUrl);
rssDoc = new XmlDocument();
rssDoc.Load (rssReader);
XmlNode rssNode = null;
for (int i = 0; i < rssDoc.ChildNodes.Count; i++) {
XmlNode childNode = rssDoc.ChildNodes [i];
if (childNode.Name == "rss") {
rssNode = childNode;
break;
}
}
XmlNode channelNode = null;
if (rssNode != null) {
for (int i = 0; i < rssNode.ChildNodes.Count; i++) {
XmlNode childNode = rssNode.ChildNodes [i];
if (childNode.Name == "channel") {
channelNode = childNode;
break;
}
}
}
List<XmlNode> newsItems = new List<XmlNode>();
if (channelNode != null) {
for (int i = 0; i < channelNode.ChildNodes.Count; i++) {
XmlNode childNode = channelNode.ChildNodes [i];
if (childNode.Name == "item") {
newsItems.Add (childNode);
}
}
}
foreach (XmlNode newsItem in newsItems) {
string title = newsItem ["title"].InnerText;
string description = newsItem ["description"].InnerText;
string link = newsItem ["link"].InnerText;
GameObject childObject = Instantiate(newsItemObject) as GameObject;
childObject.transform.SetParent(gameObject.transform, false);
childObject.transform.Find ("Title").gameObject.GetComponent<Text>().text = title;
childObject.transform.Find ("Title").gameObject.GetComponent<LinkClick>().link = link;
childObject.transform.Find ("Description").gameObject.GetComponent<Text>().text = description;
}
}
}
Вот unity package
Вот APK-:
- ARMv7
- x86
- FAT (ARMv7 + x86)
Edit:
Assets will often include AndroidManifest. Are you sure that this is not related with permissions?
Это, кажется, не имеют ничего близкого к этому. Нет .xml
файлов. Как ни странно, приложение работает, когда я импортирую только файлы C# из пакета.
Вот unity package со сценариями и здесь являются C# сами файлы: 1234
Edit # 2:
После нескольких проб и ошибок, я узнал, который нужен файл чтобы приложение работало. Я не знаю, как это возможно.
Здесь: Reporter.cs
Вы не объяснили, что вы подразумеваете под «не работает». Вызывает ли ошибка? Это крушение? Я предполагаю, что вы предполагаете, что он медленно запускается и уходит из ОС за то, что он не отвечает? Если это так, я бы посоветовал вам делать слишком много работы в Start(), и вы должны распространять его по нескольким кадрам. Система Coroutine от Unity - это простой способ добиться этого с минимальными изменениями кода. – eAi
О, извините, не понял, что я вообще не писал, что именно не так. RSS-канал должен выводить фид в виде графического интерфейса. Он делает это в Unity Editor, PC build. Он работает на сборке Android только в том случае, если это сборка разработки, иначе она просто показывает ярлык «RSS Reader», который жестко закодирован как графический интерфейс. –
Можете ли вы попробовать сделать сборку без чередования кода? –