山寨是王道--外平台JAVA项目到android的移植

来源:互联网 发布:淘宝 天衣无缝 墙布 编辑:程序博客网 时间:2024/06/13 03:53

很多时候,我们需要将其他平台已经成型的java应用直接空降到android平台之上,管他是X86(PC)还是SUN的,我们不想费那劲改一大堆代码,但是偏偏这些Java应用用到了很多native的库还有一大堆android为了省事没有支持的服务, how can we do?

 首先我们明确,所有的应用无论多眩,到最后都是JVM(对android来说,是dalvik)上的一堆烂代码class.dex--参看我以前的博文,另外,为了达到变成烂代码的目的,我们需要做一个android apK的框框,这个下个eclipse,再来个android sdk谁都有。另外还需要什么呢?为了应用畅行无阻,我们还需要个合适的签名文件。 O了。

 天幸Java和androidSDK 提供了所有必须的工具。

 一,进入所有引用到的库或者服务,用ARM交叉编译和ant狠狠折磨他,目的是变成android可认的JAR包。(说起来容易,做起来难)

 以JNA为例--目前android Java与native code的接口只支持JNI,不支持只在Java操作的JNA。这是android源自我Linux山门的一个有力证据。

 #Jna
cd $JNA_PATH
ant -Djre.arch=arm -Dos.arch=arm -Dos.prefix=linux-armv7l
cp build/jna.jar $JAR_PATH
#cp build/native/libjnidispatch.so $LIB_PATH/armeabi/
二,同理'ant"你的主程序。

 #Java control
ant
cp $CALLCONTROL_PATH/build/dist/XXX.jar $JAR_PATH/.
cp $H323STACK_PATH/build/dist/XXXX.jar $JAR_PATH/.
cp $CALLCONTROL_PATH/build/dist/lib/android/libXXXX_android.a $LIB_PATH/armeabi/

三,android框框

#android skeleton
javac -encoding GB18030 -bootclasspath  $ANDROID_FILES -cp $JAR_PATH/XXX.jar:$JAR_PATH/XXXX.jar -d $BIN_PATH $ANDROID

四,把所有的大杂烩融到一起。生成class.dex.

#get class.dex
dx --dex --output=class.dex $BIN_PATH $JAR_PATH/
五,加上android apk必须的resource.

# get resource 
aapt package -M $BUILD_PATH/AndroidManifest.xml -A $BUILD_PATH/assets/ -S $BUILD_PATH/res/ -I $ANDROID_FILES -f -F byreader

六, 来吧,生成个原始的apk.

# get a raw apk
apkbuilder control.apk -u -z byreader -f class.dex -nf $LIB_PATH -rj $JAR_PATH/jna.jar

七, 别忘了加上通行证--签名。

#sign. get the last apk
java -jar $SIGN_FILES control.apk control-app.apk
其中的SIGN_FILES 就是signapk.jar platform.x509.pem platform.pk8。

大功告成。《《《《---亲个嘴儿--》》》

特此声明:上述步骤只做参考,帮助理解,如直接拷贝用做项目,一切后果概不负责。

原创粉丝点击