Android Gradle Plugin 8+必須明確啟用 AIDL sourceSets,否則 AIDL 不會自動被編譯

以下會完整告訴你 真正原因如何修正,因為你現在遇到的狀況不是 package 錯誤,而是:

AIDL 檔雖然存在,但 Android 根本沒有編譯它

也就是說:

Gradle 沒把你的 vpnLib 的 AIDL 納入編譯流程 → 所以 IOpenVPNServiceInternal 永遠不會產生 → Java 當然 import 不到


你目前的 AIDL 檔案是正確的

你的檔案內容:

package de.blinkt.openvpn.core;

你的路徑:

vpnLib/src/main/aidl/de/blinkt/openvpn/core/IOpenVPNServiceInternal.aidl

這是正確擺放位置,Android 應該會編譯它。

但它沒被編譯,原因不是 package 錯誤,而是:


🔥 真正原因:vpnLib 模組沒有被設定為支援 AIDL

在 Android Gradle Plugin 8+(對應 Android Studio 最新版本),你必須明確啟用 AIDL sourceSets,否則 AIDL 不會自動被編譯。

Cake-VPN 的 vpnLib 是 module library(com.android.library),預設 aidl 不會啟用


🛠 解決方法:在 vpnLib/build.gradle 增加 AIDL 設定

請在:

vpnLib/build.gradle

加入以下設定:

android {
    // 這行是關鍵
    buildFeatures {
        aidl true
    }

    sourceSets {
        main {
            aidl.srcDirs = ['src/main/aidl']
        }
    }
}

🔁 加入後重新 build,你將會看到:

Android 會產生:

vpnLib/build/generated/aidl_source_output_dir/debug/out/de/blinkt/openvpn/core/IOpenVPNServiceInternal.java

然後 Java 中就可以正常 import:

import de.blinkt.openvpn.core.IOpenVPNServiceInternal;

額外注意:你的 AIDL 不完整(少兩個檔案)

ICS-OpenVPN 的同路徑下還有:

IOpenVPNStatusCallback.aidl
OpenVPNStatus.aidl

Cake-VPN 只放了:

IOpenVPNServiceInternal.aidl

這是不夠的。

你必須補齊:

1️⃣ IOpenVPNStatusCallback.aidl

2️⃣ OpenVPNStatus.aidl

否則 IOpenVPNServiceInternal 內的 type reference 會找不到。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *