R.layout.activity_main, NoClassDefFound error - PullRequest
       33

R.layout.activity_main, NoClassDefFound error

0 голосов
/ 20 сентября 2018

Я пытаюсь скомпилировать замену библиотеки API Карт Google v1 по этой ссылке GitHub mapsv1 , чтобы включить поддержку автономных карт.Я изменил MapActivity.java, чтобы он выглядел следующим образом:

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();
}
}

Моя активность_основ.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>

AndroidManifest.xml:

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

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

<application />
</manifest>

build.gradle:

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'
}

Однако я не знаю, как скомпилировать библиотеку .jar, которую мне нужно поместить в system / framework (я относительно новичок в этом), поэтому я запускаю ./gradlew :mapsv1-flashable:assembleRelease вкорневая папка для получения всплывающего почтового индекса.

Проблема заключается в том, что когда я нажимаю com.google.android.maps.jar на телефоне, приложение, использующее эту библиотеку, вылетает, как только пытается открыть карту.Ошибка говорит: java.lang.NoClassDefFoundError: org.microg.mapsv1.osmdroid.R$layout at com.google.android.maps.MapActivity.onCreate(MapActivity.java:54).

На 54-й строке написано setContentView(R.layout.activity_main);

В чем проблема?Любая помощь будет оценена.

1 Ответ

0 голосов
/ 20 сентября 2018

У вас есть NoClassDefFoundError в 54-й строке, которая делает setContentView (R.layout.activity_main); , потому что если вы посмотрите в activity_main.xml, вы можете заметить, что вы используете org.osmdroid.views.MapView , однако org.osmdroid.views.MapView не найден.

Чтобы добавить jarв вашем проекте вы должны создать каталог с именем libs внутри вашего каталога app и поместить туда свои файлы jar.Затем вы должны перейти к файлу build.gradle и добавить ваши jar-файлы в зависимости модуля gradle следующим образом:

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

, затем, когда gradle создаст ваше приложение, он добавит васфайлы jar.

...