Я пытаюсь скомпилировать мое Android приложение вручную, используя некоторые детали я нашел здесь:Woes Компиляция Приложения для Android вручную
http://geosoft.no/development/android.html
Все работает. Теперь я могу скомпилировать свои приложения без использования каких-либо инструментов, кроме моих. Это означает, что нет студии Gradle и Android. Он работает безупречно, за исключением случаев, когда мне нужно скомпилировать приложение, использующее библиотеку Google Play.
Что я пытаюсь сделать, это создать экземпляр Google Map в моем макете, следующим образом:
setContentView(R.layout.mymap_layout);
сбой приложения с этой ошибки:
E/AndroidRuntime(26119): FATAL EXCEPTION: main
E/AndroidRuntime(26119): java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
E/AndroidRuntime(26119): at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
E/AndroidRuntime(26119): at com.google.android.gms.maps.MapFragment.onInflate(Unknown Source)
E/AndroidRuntime(26119): at android.app.Activity.onCreateView(Activity.java:4703)
E/AndroidRuntime(26119): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
E/AndroidRuntime(26119): at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
E/AndroidRuntime(26119): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
E/AndroidRuntime(26119): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
E/AndroidRuntime(26119): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:306)
E/AndroidRuntime(26119): at android.app.Activity.setContentView(Activity.java:1901)
E/AndroidRuntime(26119): at com.Actividad.Brian.actividad.Google_Maps(actividad.java:2377)
E/AndroidRuntime(26119): at com.Actividad.Brian.actividad$4.run(actividad.java:1063)
E/AndroidRuntime(26119): at android.os.Handler.handleCallback(Handler.java:615)
E/AndroidRuntime(26119): at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(26119): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(26119): at android.app.ActivityThread.main(ActivityThread.java:4918)
E/AndroidRuntime(26119): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(26119): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(26119): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
E/AndroidRuntime(26119): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
E/AndroidRuntime(26119): at dalvik.system.NativeStart.main(Native Method)
Здесь находятся командные строки, Я использую:
// CHECKS THE SHA1 FINGERPRINT OF THE KEYSTORE. (NOT USED FOR V2 OF GOOGLE MAPS).
C:\Program Files\Java\jdk1.7.0_71\bin\keytool.exe
-list -keystore "c:\users\brian\documents\Compiler\KeyStore\informes.keystore" -storepass ************** -keypass ********** -alias informes
// COMPILES THE RESOURCES.
C:\Users\brian\AppData\Local\Android\sdk\android-sdk\build-tools\21.1.1\aapt.exe
package -f -m --auto-add-overlay -S c:\users\brian\appdata\local\android\android-sdk\extras\google\google_play_services\libproject\google-play-services_lib\res -S res -J src -M src\AndroidManifest.xml -I "C:\Users\brian\AppData\Local\Android\android-sdk\platforms\android-21\android.jar"
// COMPILES THE RESOURCE CLASS.
C:\Program Files\Java\jdk1.7.0_71\bin\javac.exe
-d android\bin -classpath "C:\Users\brian\AppData\Local\Android\android-sdk\platforms\android-21\android.jar";android\obj;"C:\Users\brian\AppData\Local\Android\android-sdk\extras\google\google_play_services\libproject\google-play-services_lib\libs\google-play-services.jar";"C:\Users\brian\AppData\Local\Android\android-sdk\extras\android\support\v4\android-support-v4.jar" -target 1.5 -source 1.5 -version -Xlint:none -version -encoding UTF-8 -sourcepath android\src android\src\com\Actividad\Brian\*.java
//COMPILES THE JAVA CLASS (USER'S CODE).
C:\Program Files\Java\jdk1.7.0_71\bin\javac.exe
-d android\bin -verbose -Xlint -classpath "C:\Users\brian\AppData\Local\Android\android-sdk\platforms\android-21\android.jar"";""android\obj;C:\Users\brian\AppData\Local\Android\android-sdk\extras\google\google_play_services\libproject\google-play-services_lib\libs\google-play-services.jar";"C:\Users\brian\AppData\Local\Android\android-sdk\extras\android\support\v4\android-support-v4.jar" -sourcepath android\src android\src\com\Actividad\Brian\*.java
// CREATES THE DEX FILE (ANDROID'S EXECUTABLE).
C:\Program Files\Java\jdk1.7.0_71\bin\java.exe
-Xms1024m -Xmx2048m -jar "C:\Users\brian\AppData\Local\Android\sdk\android-sdk\build-tools\21.1.1\lib\dx.jar" --dex --output="C:\Users\brian\Documents\Compiler\Temp\android\bin\classes.dex" "C:\Users\brian\Documents\Compiler\Temp\android\bin" "C:\Users\brian\AppData\Local\Android\android-sdk\extras\google\google_play_services\libproject\google-play-services_lib\libs\google-play-services.jar" "C:\Users\brian\AppData\Local\Android\android-sdk\extras\android\support\v4\android-support-v4.jar"
// COMPILES THE APK EXECUTABLE. (UNSIGNED)
C:\Users\brian\AppData\Local\Android\sdk\android-sdk\build-tools\21.1.1\aapt.exe
package -f --auto-add-overlay -M "C:\Users\brian\Documents\Compiler\Temp\android\src\AndroidManifest.xml" -S c:\users\brian\appdata\local\android\android-sdk\extras\google\google_play_services\libproject\google-play-services_lib\res -S "C:\Users\brian\Documents\Compiler\Temp\android\res" -A "C:\Users\brian\Documents\Compiler\Temp\android\assets" -I "C:\Users\brian\AppData\Local\Android\android-sdk\platforms\android-21\android.jar" -F "C:\Users\brian\Documents\Compiler\Temp\android\bin\actividad.unsigned.apk" "C:\Users\brian\Documents\Compiler\Temp\android\bin"
// SIGNS THE APK EXECUTABLE.
C:\Program Files\Java\jdk1.7.0_71\bin\jarsigner.exe
***IRRELEVANT, AND NOT POSTED BECAUSE OF KEYS***
//LIST THE DEVICES.
C:\Users\brian\AppData\Local\Android\sdk\android-sdk\platform-tools\adb.exe
devices
// GETS THE NAME OF THE PLUGGED DEVICE
C:\Users\brian\AppData\Local\Android\sdk\android-sdk\platform-tools\adb.exe
-s 1c523b41 shell getprop ro.product.model
// CLEARS THE LOGCAT.
C:\Users\brian\AppData\Local\Android\sdk\android-sdk\platform-tools\adb.exe
logcat -c
// INSTALLS THE COMPILED APK.
C:\Users\brian\AppData\Local\Android\sdk\android-sdk\platform-tools\adb.exe
-e -s 1c523b41 install -r C:\Users\brian\Documents\Compiler\Temp\android\bin\actividad.apk
// RUNS IT.
C:\Users\brian\AppData\Local\Android\sdk\android-sdk\platform-tools\adb.exe
shell am start -n com.Actividad.Brian/.actividad
// DISPLAYS THE LOGCAT AFTER THE CRASH.
C:\Users\brian\AppData\Local\Android\sdk\android-sdk\platform-tools\adb.exe
logcat
Я думаю, что я не правильно использую JAR для игры Google, но я не уверен см., где ошибка. ....
Любые идеи?
Вы используете эмулятор для запуска этого приложения? –
Да, несколько раз. Приложения, отличные от Google Play, отлично работают либо на устройстве, либо на эмуляторе, но при сбое при вызове setContentView() происходит сбой. Если ваш вопрос связан с ключом -e, он работает также с физическими устройствами, согласно руководству. В приведенном выше примере я установил APK в свою Sansung Galaxy. – Brian
Вообще-то фатальные исключения появляются, когда на вашем устройстве не установлены карты Google, и вы не запускаете карту перед ее использованием. Убедитесь, что GoogleMap и Play Services установлены на устройстве, на котором запущено приложение. –