在Android上的锡兰

一篇文章中 ,我解释了如何在Apache Cordova中使用Ceylon来为每个移动平台(包括iOS和Android)编写应用程序。 这次,道歉很晚(下周变成下个月),我将解释如何使用Ceylon IntelliJ插件在Android Studio的Ceylon中编写本机Android应用程序。

Android Studio上的Ceylon入门

要开始在Android Studio中编写Ceylon应用程序,请按照以下步骤操作:

  • 下载Android Studio
  • 启动它
  • 通过单击“ Start a new Android Studio Project来创建新的应用程序
  • 您可以将这些值用作Application nameCeylonDemo
  • 对于Company domainandroid.example.com
  • 接下来,选择一个Empty activityActivity NameMainActivity
  • 单击Finish并等待创建项目

至此,您已经打开了一个Android项目,但是我们仍然没有时间安装Ceylon插件,所以现在就开始做吧:

  • 单击File > Settings > Plugins > Browse Repositories
  • 然后在Manage Repositories > +
  • 添加此存储库: https://downloads.ceylon-lang.org/ide/intellij/development/updatePlugins.xml : https://downloads.ceylon-lang.org/ide/intellij/development/updatePlugins.xml
  • 现在单击Install Ceylon IDE

您可能需要重新启动Android Studio,这样做。

接下来,我们将把我们的Android项目转换为Ceylon Android项目:

  • Android视图中,右键单击app > Configure Ceylon in this Module
  • 在出现的配置对话框中单击“ OK

这将设置Ceylon插件,并将在Gradle构建中添加您所需的大部分内容,以构建Ceylon Android应用程序。 现在,您在app/src/main/ceylon拥有Ceylon源代码,并且其中包含模块描述符和空活动:

ide

目前,这需要构建一个Ceylon 1.2.3发行版,并且由于尚未发布,因此您将不得不自己构建一个 (只是“ Getting the source部分),或者下载一个夜间版本 。 有了它之后,在附近编辑app/build.gradle然后结束添加ceylon > ceylonLocation并将其指向安装发行版的位置(它需要指向Ceylon二进制文件,而不仅仅是指向发行版的根目录):

ceylon {
    // ...
    ceylonLocation ".../ceylon/dist/dist/bin/ceylon"
}

确保单击立即Sync now以同步Gradle构建。

现在,我们正在修复一个错误,该错误无法检测到Android SDK工具和模块的确切版本,因此,根据您使用的Android Tools版本,您可能必须同步导入的错误。 com.android.support:appcompat-v7:23.1.1app/build.gradle (在dependencies ),并在锡兰模块描述符module.ceylon 。 确保Ceylon导入版本与Gradle导入版本相同,因为由于Android的特殊性,Gradle构建才使其可用于Ceylon。

为了完成转换,请确保删除Java活动(因为我们将使锡兰保持一个状态),在Project Files ,删除app/src/main/java

由于另一项待解决的插件修复,您可能此时必须单击Tools > Ceylon > Reset Ceylon Model以使Ceylon插件与所有这些过去的更改保持同步(不要担心,我们目前正在对此进行修复)。

好消息是,我们已经能够单击“ Run app并在模拟器中进行尝试,但我们将使其更加有趣。

自定义您的Ceylon Android活动

我们将显示在Ceylon Herd上发布的Ceylon模块的列表,因此我们将使用Ceylon SDK,尤其是您必须编辑module.ceylon以添加以下导入:

import ceylon.http.client "1.2.3";
import ceylon.uri "1.2.3";
import ceylon.json "1.2.3";
import ceylon.collection "1.2.3";
import ceylon.interop.java "1.2.3";

接下来,我们将把我们的MainActivity变成一个ListActivity并运行一个异步任务以连接到Herd REST端点,因此使用以下命令编辑MainActivity.ceylon

import android.os { Bundle, AsyncTask }
import android.app { ListActivity }
import android.widget { ArrayAdapter, ListAdapter }
import android.support.v7.app { AppCompatActivity }
import ceylon.interop.java { createJavaStringArray }
import java.lang { JString = String }
import android { AndroidR = R }
import ceylon.language.meta { modules }
import ceylon.uri { parseUri = parse }
import ceylon.http.client { httpGet = get }
import ceylon.json { parseJson = parse, JsonObject = Object, JsonArray = Array }
import ceylon.collection { MutableList, LinkedList }

shared class MainActivity() extends ListActivity() {

class LoadModules() extends AsyncTask<String, Nothing, List<String>>() {
shared actual List<String> doInBackground(String?* uris){
assert(exists uri = uris.first);
value response = httpGet(parseUri(uri)).execute();
value modules = LinkedList<String>();
assert(is JsonObject json = parseJson(response.contents),
is JsonArray results = json["results"]);
// Iterate modules
for(res in results) {
assert (is JsonObject res); // Get the list of versions
assert (is String name = res["module"],
is JsonArray versions = res["versions"]);
modules.add(name);
print(name);
}
return modules;
}
shared actual void onPostExecute(List<String> result){
print("Got result: ``result``");

ListAdapter adapter = ArrayAdapter<JString>(outer, AndroidR.Layout.simple_list_item_1,
createJavaStringArray(result));
listAdapter = adapter;
}
}

shared actual void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.Layout.activity_main);

LoadModules().execute("https://modules.ceylon-lang.org/api/1/complete-modules?module=ceylon.");
}
}

现在编辑app/src/main/res/layout/activity_main.xml以将活动类型更改为列表活动:

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@android:id/list"/>

最后,由于我们正在访问Web服务,因此将其添加到app/src/main/res/AndroidManifest.xml ,最后为您的应用请求network许可:

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

这就是您所需要的,现在只需单击Run > Run app然后观看您的Ceylon应用程序显示仿真器中的模块列表:

应用

一些技术信息

Ceylon IntelliJ插件尚未发布,但是预览即将发布。 试试看时,您会发现它已经相当先进了。 不要犹豫, 报告任何错误 ,或者更好的是,提供修复程序:)

除了上述注意事项以及Android Studio尚无法识别Ceylon类之外,大多数功能都可以在Android上正常运行,因此在引用它们的.xml文件中以及运行它们时,它们将被标记为错误。应用程序将报告错误:

Could not identify launch activity: Default Activity not found. Error while Launching activity

这仅意味着它无法启动您的应用程序,您必须单击它才能在模拟器中启动它。 但是部署成功了。 我们目前正在解决此问题,因此只会有所改善。

如果您想恢复到Ceylon Eclipse IDE来编辑Ceylon Android应用程序,则可以,一旦使用Android Studio设置了项目,它就可以使用。 使用它进行设置要容易得多,因此所有Gradle配置都是正确的。 一旦完成,就可以使用Eclipse,并使用$ ./gradlew assembleDebug来构建APK。

这项工作取决于我们在Ceylon 1.2.3(即将发布)中所做的更改,该更改增加了对jar的支持,这些jar提供了备用的较小的JDK(例如Android jar),并提高了模块性,从而使创建的应用程序所依赖的更少运行时Ceylon罐子比以前更罐,修复了运行时元模型以支持Android运行时,以及其他一些调整。 我可能会在以后的博客文章中写所有这些内容。

这项工作还取决于Renato Athaydes编写的Ceylon Gradle插件 ,以及新的Ceylon Gradle Android插件 ,该插件在Android应用程序中增加了对Ceylon的支持。 这个插件还没有完成,特别是还不支持增量编译(即使Ceylon IDE和编译器也可以)。 它还不支持最新的Android Instant Run功能。 再次,请报告问题或更佳的结果,提出拉取请求:)

翻译自: https://www.javacodegeeks.com/2016/06/ceylon-on-android.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值