【发布时间】:2019-02-24 04:09:06
【问题描述】:
我正在尝试从此 GitHub 链接 mapsv1 编译 Google Maps API v1 库替换,以包括离线地图支持。我将 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();
}
}
我的activity_main.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'
}
但是,我不知道如何编译需要放入 system/framework 的 .jar 库(我对此比较陌生),所以我在根文件夹中运行 ./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);
有什么问题?任何帮助将不胜感激。
【问题讨论】:
标签: java android r.java-file