R.layout.activity_main,NoClassDefFound错误

时间:2018-09-19 22:37:58

标签: java android r.java-file

我正在尝试从此GitHub链接mapsv1编译Google Maps API v1库替换,以包括离线地图支持。我将MapActivity.java修改如下:

--global-option="-mfloat-abi=hard"

我的activity_main.xml:

package com.google.android.maps;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import org.microg.annotation.OriginalApi;

import org.microg.mapsv1.osmdroid.R;
import org.osmdroid.api.IMapController;
import org.osmdroid.tileprovider.tilesource.XYTileSource;
import org.osmdroid.views.MapView;
import org.osmdroid.util.GeoPoint;

@OriginalApi
public class MapActivity extends Activity {

MapView map = null;

@OriginalApi
public MapActivity() {
    super();
}

@OriginalApi
protected boolean isLocationDisplayed() {
    return false;
}

@OriginalApi
protected boolean isRouteDisplayed() {
    return false;
}

@OriginalApi
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    map = (MapView) findViewById(R.id.mapview);
    map.setTileSource(new XYTileSource("OSMPublicTransport", 13, 16, 256, ".png", new String[]{}));
    map.setUseDataConnection(false); //optional, but a good way to prevent loading from the network and test your zip loading.
    IMapController mapController = map.getController();
    mapController.setZoom(15);
    GeoPoint startPoint = new GeoPoint(56.877879, 78.459979);
    mapController.setCenter(startPoint);
}

@OriginalApi
@Override
protected void onDestroy() {
    super.onDestroy();
}

@OriginalApi
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
}

@OriginalApi
@Override
protected void onPause() {
    super.onPause();
}

@OriginalApi
@Override
protected void onResume() {
    super.onResume();
}
}

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<org.osmdroid.views.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>

build.gradle:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.microg.mapsv1.osmdroid">

<uses-sdk android:minSdkVersion="9" />

<application />
</manifest>

但是,我不知道如何编译需要放入系统/框架中的.jar库(对此我还比较陌生),因此我在根文件夹中运行buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.5.0' } } apply plugin: 'com.android.library' String getMyVersionName() { def stdout = new ByteArrayOutputStream() exec { commandLine 'git', 'describe', '--tags', '--always', '--dirty' standardOutput = stdout } return stdout.toString().trim() } repositories { jcenter() } dependencies { compile 'org.osmdroid:osmdroid-android:5.1' } android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { versionName getMyVersionName() } compileOptions { sourceCompatibility JavaVersion.VERSION_1_6 } } if (file('user.gradle').exists()) { apply from: 'user.gradle' } 来获取闪光的拉链。

问题是,当我将./gradlew :mapsv1-flashable:assembleRelease推到手机上时,使用该库的应用程序在尝试打开地图时便崩溃了。错误显示com.google.android.maps.jar

第54行显示java.lang.NoClassDefFoundError: org.microg.mapsv1.osmdroid.R$layout at com.google.android.maps.MapActivity.onCreate(MapActivity.java:54)

出什么问题了?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您在第54 行中有 NoClassDefFoundError ,该行执行 setContentView(R.layout.activity_main); ,因为如果您查看 activity_main.xml ,您可以注意到您使用的是 org.osmdroid.views.MapView ,但是找不到 org.osmdroid.views.MapView

要在项目中添加jar,必须在 app 目录中创建一个名为 libs 的目录,并将jar文件放在此处。然后,您必须转到 build.gradle 文件,然后将jar文件添加到模块gradle依赖项中,如下所示:

dependencies{
   compile files('libs/your_jar_file.jar')
}

然后gradle构建您的应用程序时,它将添加您的jar文件。