3.15 使用android studio的問題

環境
android studio 2.3.2
ndk 14.1.3816874

我使用as open tests底下的cpp-empty
make project build出來的apk 大小只有4912kb
執行時會失敗,提示
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.cocos2dx.cpp_empty_test/org.cocos2dx.cpp_empty_test.AppActivity}: java.lang.ClassNotFoundException: Didn’t find class “org.cocos2dx.cpp_empty_test.AppActivity” on path: DexPathList[[zip file “/data/app/org.cocos2dx.cpp_empty_test-1/base.apk”],nativeLibraryDirectories=[/data/app/org.cocos2dx.cpp_empty_test-1/lib/arm, /vendor/lib, /system/lib]]

但是用as build apk 出來的apk大小就有5404kb
這時候可以正常運行
我不太清楚為什麼會有這樣的差異

另外就是 創建新project
cocos new MyGame -p com.your_company.mygame -l cpp -d NEW_PROJECTS_DIR
直接build apk 大小只有1mb 且無法安裝
新建的androi studio project,app底下build.gradle跟cpp-test的 明顯不同
少了externalNativeBuild,我手動複製cpptest的過去
as 還是會提示unknow property PROP_TARGET_SDK_VERSION
PROP_APP_ABI
不知道是不是在創建新專案過程中哪邊搞錯了?

'apply plugin: ‘com.android.application’

android {
compileSdkVersion 23
buildToolsVersion ‘25.0.3’

defaultConfig {
    applicationId "cpptest"
    minSdkVersion 10
    targetSdkVersion 21
    versionCode 1
    versionName "1.0"
}

sourceSets.main {
    java.srcDir "src"
    res.srcDir "res"
    jniLibs.srcDir "libs"
    manifest.srcFile "AndroidManifest.xml"
    assets.srcDir "assets"
}

signingConfigs {

    release {
        if (project.hasProperty("RELEASE_STORE_FILE")) {
            storeFile file(RELEASE_STORE_FILE)
            storePassword RELEASE_STORE_PASSWORD
            keyAlias RELEASE_KEY_ALIAS
            keyPassword RELEASE_KEY_PASSWORD
        }
    }
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        if (project.hasProperty("RELEASE_STORE_FILE")) {
            signingConfig signingConfigs.release
        }
    }
}

}

dependencies {
compile fileTree(dir: ‘libs’, include: [’*.jar’])
compile project(’:libcocos2dx’)
}

task cleanAssets(type: Delete) {
delete ‘assets’
}
task copyAssets(type: Copy) {
from ‘…/…/Resources’
into ‘assets’
}

clean.dependsOn cleanAssets
preBuild.dependsOn copyAssets’

1赞

自問自答
原來是因為環境變數指到舊的cocos2dx library
所cocos new 出來的專案一直都是舊的
難怪為什麼build gradle 一直跟cpp-test裡面的內容不合

不過按 三角形箭頭產生的apk 依舊是無法執行
還是得靠build apk
而且無法自動安裝到裝置

可以直接通过Android Studio编译安装啊。

我現在就是用android studio編譯
編譯的是3.15 new出來的空專案
但是按play button build 出來的apk不能執行
一定要在menu->build->build apk 這樣出來的apk才能執行
我把 編譯出來的apk打開來看兩者差異
可以執行的apk 內只有一個classes.dex
不可以執行的apk內有classed.dex,classes2.dex

還有另一個問題就是無法自動安裝
一直提示
Installation failed with message Failed to establish session.
It is possible that this issue is resolved by uninstalling an existing version of the apk if it is present, and then re-installing.

WARNING: Uninstalling will remove the application data!

Do you want to uninstall the existing application?

1赞

之前安装过了改app,签名不同,需要先卸载再安装。

即使手機上已經沒有安裝任何相同package name的app
android studio還是會提示同樣訊息
且我用手動安裝還是裝得上去的

安裝是次要問題
最主要問題是按play button 編譯 的apk 不能執行
一定menu->build->build apk 編譯的apk 才能執行
play button做得不就是build + run而已嗎
怎麼會編譯出一樣的結果
完全無法理解這箇中差異

1赞

自立自強解決了
如果有人遇到一樣問題
run 出來的apk 無法執行 或者是無法自動安裝
可以參考
https://stackoverflow.com/questions/34925708/android-studio-difference-in-size-between-build-apk-vs-run-apk
http://www.echojb.com/android/2017/05/23/397743.html
關閉instant run
在android studio->file->setting 搜尋 instant run
第一項取消打勾就關掉了
在android stuido 左側選單 切到project狀態
然後清掉build ,然後 clear project
在重新編譯即可正常執行跟自動安裝