Code Monkey home page Code Monkey logo

sisong / unityandroidhotupdate Goto Github PK

View Code? Open in Web Editor NEW
180.0 15.0 44.0 170 KB

(Unity3D热更新) provide a way to hot update Unity app on Android, support code&resources, not need lua js or IL runtime etc..., will not disturb your project development; just loading the new version apk file to achieve.

License: MIT License

Makefile 4.18% Shell 0.25% C++ 63.91% C 4.54% Java 18.56% C# 8.30% Batchfile 0.25%
unity hot update il2cpp patch unity3d mono fix apkdiffpatch hdiffpatch

unityandroidhotupdate's People

Contributors

housisong avatar optimisticquan avatar sisong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

unityandroidhotupdate's Issues

testHotUpdate 测试报错

private static void testHotUpdate(Context app,
String baseApk,String baseSoDir,
String hotApk,String hotSoDir,
String newApk,String newSoDir){
if (pathIsExists(newApk)||(pathIsExists(newSoDir))) return;
String testDir=app.getExternalFilesDir("").getAbsolutePath()+"/testHotUpdate";
//default: testDir=="/sdcard/Android/data//files/testHotUpdate";
//NOTE: put the files you need test into the testDir directory
String testPatFile=testDir+"/new.pat"; //test pat file
if (!pathIsExists(testPatFile)) return;
Log.w(kLogTag, "testHotUpdate() with "+testPatFile);
mapPathLoadLib(hotSoDir,kHotUnityLib); //for native function: virtualApkPatch()

    String testBase=testDir+"/base.apk";
    if (pathIsExists(testBase)) {
        baseApk  = testBase;
        baseSoDir= testBase + "_lib";
    }
    String testHot=testDir+"/update.apk";
    if (pathIsExists(testBase)||pathIsExists(testHot)) {
        hotApk  = testHot;
        hotSoDir= testHot + "_lib";
    }
    int  ret=virtualApkPatch(baseApk,baseSoDir,hotApk,hotSoDir,
             newApk,newSoDir,testPatFile,3);
    Log.w(kLogTag, "virtualApkPatch() result " +String.valueOf(ret));
    if ((ret==0) && removeFile(testPatFile)){ //update ok
        Log.w(kLogTag, "testHotUpdate() ok");
    }else{
        Log.w(kLogTag, "testHotUpdate() ERROR, exitApp");
        exitApp(ret);
    }
}

看了代码,有一个test方法,拿一个空项目按照代码设置文件夹和new.pat

执行结果报错
2020-11-05 19:25:35.244 21034-21060/com.rsg.wdwt E/Unity: Inflate Error: invalid stored block lengths (file zip crc32 : 19676369) (result: fffffffd)

(Filename:  Line: 212)

手工热更新测试错误

手工热更新测试错误,希望大佬指点我一下。大佬能加一下Q吗?2229713767

执行 doHot(baseApk,baseSoDir,hotApk,hotSoDir);就报错了,可是so库都是在release中下载的,然后直接导入的jniLibs目录文件下

java.lang.UnsatisfiedLinkError: No implementation found for void com.unity3d.update.HotUnity.doHot(java.lang.String, java.lang.String, java.lang.String, java.lang.String) (tried Java_com_unity3d_update_HotUnity_doHot and Java_com_unity3d_update_HotUnity_doHot__Ljava_lang_String_2Ljava_lang_String_2Ljava_lang_String_2Ljava_lang_String_2)

libunity.so加载失败

libunity.so是否有路径校验。我现在hook映射已经成功了,但是仍加载不出来。在Loading player data之后就报错了

Failed to load Il2CPP

将libil2cpp.so 放入update.apk_lib中, 重启后提示 Error : Failed to load Il2CPP.

无感知更新so?

支持更新libunity.so?
这个更新so是否具有广泛性?跟unity无关的一些ndk编译的动态库也可以更新吗?(程序逻辑来保证更新结束加载so)
跟商店(国内国外)规则会不会有冲突?

support Unity little version update, hot update libmain.so

auto loaded libmain.so when new UnityPlayer(),so can't hot update it.
code is:

    static {
        (new m()).a();
        s = false;
        s = loadLibraryStatic("main");
    }  

edit file unity-classes.jar!/com/unity3d/player/UnityPlayer.class ,
change "main" to "null" , and add libnull.so file in project libs;
( "main" is only used here, so edit is safe; )

是否支持多补丁更新?

请问如果有多个补丁包的话,这种情况该如何处理,我尝试了用不同的补丁包连续调用两次apkPatch,第二次调用的时候返回的不是0,是否有方法能一次更新完多个补丁包,而不用重启多次,或者能在本地将多个补丁包合成一个,再调用apkPatch

test on oppo phone

/data/data/appid/files can get it's path?

test it's ok!

found fail dlopen libil2cpp.so!

fix it by preload new libil2cpp.so

Android API 21,22 CRASH on simulator

crash after re dlopen libunity.so, test on simulator;
before this,have a another crash:
crash after open("/storage/sdcard/Android/data/<app id>/files/il2cpp/SymbolMap-ARM64",577) (test remove ARM64 lib is have same crash)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.