मैं एंड्रॉइड विकास में अपनी निर्माण प्रक्रिया के लिए मेवेन पर स्विच करना चाहता हूं। मैंने pom.xml बनाने के लिए http://www.sonatype.com/books/mvnref-book/reference/android-dev-sect-archetype.html का पालन किया और संस्करण को थोड़ा समायोजित किया ताकि मैं एंड्रॉइड-मैवेन-प्लगइन का नवीनतम संस्करण उपयोग कर रहा हूं।एपीके में क्लास नॉटफाउंड अपवाद मैवेन के साथ निर्माण
जबकि मेरा एपीके मेरे आईडीई (इंटेलजे) के भीतर मैन्युअल रूप से ठीक से निर्माण करता है, तो मेवेन के साथ निर्मित एपीके के साथ समस्याएं होती हैं। जाहिर है कि कुछ गुम है जो कक्षाओं को एपीके में नहीं डालता है।
जब मैं दोनों जेनरेट एपीके (इसे अनजिप कर रहा हूं) की जांच करता हूं, मुझे लगता है कि मेवेन जेनरेटेड एपीके के क्लास.dex नियमित (24.9 केबी) की तुलना में बहुत छोटा (2.6kB) है। स्पष्ट रूप से वहां कक्षाएं गायब हैं।
तो, जब इस apk शुरू, मैं निम्न त्रुटि हो रही है:
E/AndroidRuntime(31228): FATAL EXCEPTION: main
E/AndroidRuntime(31228): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mycompany.abc/com.mycompany.abc.ABCActivity}: java.lang.ClassNotFoundException: com.mycompany.abc.ABCActivity in loader dalvik.system.PathClassLoader[/mnt/asec/com.mycompany.abc-1/pkg.apk]
E/AndroidRuntime(31228): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
E/AndroidRuntime(31228): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
E/AndroidRuntime(31228): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
E/AndroidRuntime(31228): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
E/AndroidRuntime(31228): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(31228): at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime(31228): at android.app.ActivityThread.main(ActivityThread.java:3683)
E/AndroidRuntime(31228): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(31228): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(31228): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
E/AndroidRuntime(31228): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E/AndroidRuntime(31228): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(31228): Caused by: java.lang.ClassNotFoundException: com.mycompany.abc.ABCActivity in loader dalvik.system.PathClassLoader[/mnt/asec/com.mycompany.abc-1/pkg.apk]
E/AndroidRuntime(31228): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
E/AndroidRuntime(31228): at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
E/AndroidRuntime(31228): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/AndroidRuntime(31228): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
E/AndroidRuntime(31228): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
E/AndroidRuntime(31228): ... 11 more
W/ActivityManager(4964): Force finishing activity com.mycompany.abc/.ABCActivity
W/ActivityManager(4964): Activity pause timeout for HistoryRecord{40902960 com.mycompany.abc/.ABCActivity}
यह मेरा pom.xml है, जिस पर मैं का उपयोग करें: mvn install -P sign
या mvn android:apk
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>com.mycompany.abc</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>apk</packaging>
<name>com.mycompany.abc</name>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!-- Simply read properties from file -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>android.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
<assetsDirectory>${project.basedir}/assets</assetsDirectory>
<resourceDirectory>${project.basedir}/res</resourceDirectory>
<nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
<sdk>
<platform>11</platform>
</sdk>
<deleteConflictingFiles>true</deleteConflictingFiles>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
<device>usb</device>
</configuration>
<extensions>true</extensions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>exec-maven-plugin</artifactId>
<groupId>org.codehaus.mojo</groupId>
<configuration>
<executable>${basedir}/scripts/run_app.sh</executable>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>sign</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>signing</id>
<goals>
<goal>sign</goal>
</goals>
<phase>package</phase>
<inherited>true</inherited>
<configuration>
<archiveDirectory></archiveDirectory>
<includes>
<include>target/*.apk</include>
</includes>
<keystore>/path/to/debug.keystore</keystore>
<storepass>android</storepass>
<keypass>android</keypass>
<alias>androiddebugkey</alias>
<arguments>
<argument>-sigalg</argument><argument>MD5withRSA</argument>
<argument>-digestalg</argument><argument>SHA1</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<inherited>true</inherited>
<configuration>
<sign>
<debug>false</debug>
</sign>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
हम्म, जब मैं इसे जोड़ता हूं तो मुझे जुनीट से संबंधित त्रुटियां मौजूद नहीं होतीं। ऐसा लगता है कि यह अब src dir में सब कुछ ढूंढता है। मैं इसे रूट में जोड़ रहा हूं। क्या ये सही है? –
conor
हाँ, रूट में, मेरे लिए ठीक काम करता है। शायद यह भी सहायक है, यकीन नहीं है, मैंने इसे अभी भी गुगल किया है: https://groups.google.com/forum/?fromgroups=#!topic/maven-android-developers/kgUSnjTLHQg –
मेरे लिए भी एक आकर्षण की तरह काम करता है। मैंने सोचा कि अगर किसी को प्रदान नहीं किया गया तो मैवेन ने डिफ़ॉल्ट स्रोत निर्देशिका के रूप में src का उपयोग किया। लेकिन मैं मेवेन के बारे में एक नयाबी हूं, मैं अब भी उत्पादन कर रहा हूं उससे ज्यादा सीख रहा हूं :) – daffycricket