首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android中使用java库很困难,思想上很好

在Android中使用java库很困难,思想上很好
EN

Stack Overflow用户
提问于 2015-05-10 05:47:54
回答 1查看 539关注 0票数 3

新的Android程序员来了。在过去的几天里,我一直在开发一个android应用程序,我遇到了一些障碍。

我正在使用一个名为Kuromoji (http://www.atilika.org/)的库将日语文本块解析为单个单词。但当我在Android中使用它时,它的功能似乎并不正确。

它使用纯Java构建并运行Intellij IDEA,以及使用Gradle的Java项目,但当我迁移到Android时,它开始出现故障。

我只是在为IDEA和Android运行新生成的空项目,我似乎无法确定冲突的因素。

感谢您的阅读,任何帮助都将不胜感激。

代码语言:javascript
复制
import org.atilika.kuromoji.Tokenizer;
import org.atilika.kuromoji.Token;

public class kuromoji_test {

public static void main(String[] args){
    Tokenizer tokenizer = Tokenizer.builder().build();
    for (Token token : tokenizer.tokenize("寿司が食べたい。")) {
        System.out.println(token.getSurfaceForm() + "\t" + token.getAllFeatures());
    }
}
}

该代码在有或不带Gradle的情况下运行,生成正确的解析词以及词性等.

寿司名詞,一般,寿司,スシ,スシ的

が助詞,格助詞,一般,,,*,が,ガ,ガ

食べ動詞,自立,,,一段,連用形,食べる,タベ,タベ

たい助動詞,,,*,特殊·タイ,基本形,たい,タイ,タイ

..。記号,句点,,,。....

代码语言:javascript
复制
package com.example.towson.kuromoji_testing_with_android_studio;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import org.atilika.kuromoji.Token;
import org.atilika.kuromoji.Tokenizer;


public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_main);

    Tokenizer tokenizer = Tokenizer.builder().build();
    for (Token token : tokenizer.tokenize("寿司が食べたい。")) {
        System.out.println(token.getSurfaceForm() + "\t" + token.getAllFeatures());
    }

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

一切都很好,但是现在黑司只是按字符返回我的输入。返回字典信息的另一个函数似乎根本不运行。

Kuromoji在我的libs文件夹中,我把jar作为一个库添加。

05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:寿

05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:司

05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:が

05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:食

05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:べ

05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:た

05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:い

05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:

我来自Android的build.Gradle:

代码语言:javascript
复制
apply plugin: 'com.android.application'

android {
compileSdkVersion 22
buildToolsVersion "21.1.2"

defaultConfig {
    applicationId "com.example.towson.kuromoji_testing_with_android_studio"
    minSdkVersion 19
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'),    'proguard-rules.pro'
    }
}
}

repositories {
mavenCentral()
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.0.0'
}

黑眼圈被编译在libs文件夹中。

来自Intellij的我的build.Gradle

代码语言:javascript
复制
apply plugin: 'java'

sourceCompatibility = 1.5
version = '1.0'

repositories {
mavenCentral()
}

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}

编辑:在Android应用程序中使用IDEA时,库继续出现故障。问题似乎与Android有关,而不是IDE。

签入调试模式时,库文件中的类对象将正确实例化。但是,大多数字符串方法只返回"“。不知道这是怎么回事。

编辑2:

下面是我的令牌和令牌程序类对象的照片。这就是它们正确运行时的样子。

下面是我的令牌和令牌程序类对象的照片,它们不正确地运行,您可以看到"surface_form“标记只包含一个字符,而不是两个字符。

有人知道我可以怎样调试这个吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-11 17:24:26

好吧,我想清楚了。我一直在使用一个调用Java函数的包,该包没有包含在Android版本的java中。

这就是为什么当我的项目被设置为Android应用程序时,我才有问题的原因。

将此复制自林特报告:

*自从我发表这个问题以来,使用了一套不同的图书馆。Kuromoji是日本的一种形态分析器,从那时起就把他们的代码捐赠给了Apache软件基金会。

在本报告中使用org.apache.lucene库。

InvalidPackage:未包含在Android中的包

../libs/lucene-分析器-通用-5.1.0.jar:库中无效的包引用;未包含在Android: java.nio.file中。引用自org.apache.lucene.analysis.hunspell.Dictionary.

../libs/lucene 5.1.0.jar:库中无效的包引用;没有包含在Android: java.lang.invoke中。引用自org.apache.lucene.util.AttributeFactory。

优先事项:6/ 10

类别:正确性

严重程度:错误

说明:未包含在Android中的软件包。此检查通过库进行扫描,查找对未包含在Android中的API的调用。

创建Android项目时,类路径被设置为只能访问Android中包含的API包中的类。但是,如果将其他项目添加到您的lib/文件夹中,则无法保证这些.jar文件是使用特定于Android的类路径构建的,特别是,它们可能正在访问不受支持的API,如java.applet。

此检查通过库jars进行扫描,并查找未包含在Android中的API包的引用,并标记这些包。如果您的代码调用了一个库类,它最终引用了不受支持的包,那么这只是一个错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30148174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档