2015-05-20 2 views
2

Я пытаюсь скомпилировать мое 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, но я не уверен см., где ошибка. ....

Любые идеи?

+0

Вы используете эмулятор для запуска этого приложения? –

+0

Да, несколько раз. Приложения, отличные от Google Play, отлично работают либо на устройстве, либо на эмуляторе, но при сбое при вызове setContentView() происходит сбой. Если ваш вопрос связан с ключом -e, он работает также с физическими устройствами, согласно руководству. В приведенном выше примере я установил APK в свою Sansung Galaxy. – Brian

+0

Вообще-то фатальные исключения появляются, когда на вашем устройстве не установлены карты Google, и вы не запускаете карту перед ее использованием. Убедитесь, что GoogleMap и Play Services установлены на устройстве, на котором запущено приложение. –

ответ

1

Оказывается, мне нужно было только составлять ресурсы отдельно. Как этот

// COMPILES THE LIBRARY CLASS. 
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" -J "C:\Users\Brian\Documents\output\Temp\android\src" -M "C:\Users\Brian\AppData\Local\Android\android-sdk\extras\google\google_play_services\libproject\google-play-services_lib\AndroidManifest.xml" -I "C:\Users\Brian\AppData\Local\Android\android-sdk\platforms\android-22\android.jar" 

я не сделал Ков там, где два отдельных процесса, я думал, как ресурсы должны быть составлены в той же командной строке.

Смежные вопросы