මේ පිළිතුර අතර වෙනස පිළිබිඹු කරන implementation, apiසහ compileව්යාපෘතියක් මත.
ග්රේඩ්ල් මොඩියුල තුනක් සහිත ව්යාපෘතියක් මා සතුව ඇතැයි කියමු:
- යෙදුම (Android යෙදුමක්)
- myandroidlibrary (ඇන්ඩ්රොයිඩ් පුස්තකාලයක්)
- myjavalibrary (ජාවා පුස්තකාලයක්)
appඇත myandroidlibraryපරායත්තයන් ලෙස. myandroidlibraryඇත myjavalibrary පරායත්තයන් ලෙස.

myjavalibraryසතුව MySecretපන්ති
public class MySecret {
public static String getSecret() {
return "Money";
}
}
myandroidlibraryඇත MyAndroidComponentවටිනාකමක් හසුරුවනු පන්තියේ MySecretපන්ති.
public class MyAndroidComponent {
private static String component = MySecret.getSecret();
public static String getComponent() {
return "My component: " + component;
}
}
අවසාන වශයෙන්, appවටිනාකම ගැන පමණක් උනන්දු වේmyandroidlibrary
TextView tvHelloWorld = findViewById(R.id.tv_hello_world);
tvHelloWorld.setText(MyAndroidComponent.getComponent());
දැන් අපි පරායත්තතා ගැන කතා කරමු ...
appපරිභෝජනය කිරීමට අවශ්යයි :myandroidlibrary, එබැවින් appbuild.gradle භාවිතයේදී implementation.
( සටහන : ඔබට api / compile ද භාවිතා කළ හැකිය. නමුත් එම සිතුවිල්ල මොහොතකට තබා ගන්න.)
dependencies {
implementation project(':myandroidlibrary')
}

myandroidlibraryBuild.gradle පෙනුම කුමක් විය යුතු යැයි ඔබ සිතන්නේද ? අප භාවිතා කළ යුතු විෂය පථය කුමක්ද?
අපට විකල්ප තුනක් ඇත:
dependencies {
// Option #1
implementation project(':myjavalibrary')
// Option #2
compile project(':myjavalibrary')
// Option #3
api project(':myjavalibrary')
}

ඔවුන් අතර ඇති වෙනස කුමක්ද සහ මා භාවිතා කළ යුත්තේ කුමක්ද?
සම්පාදනය හෝ Api (විකල්පය # 2 හෝ # 3)

ඔබ භාවිතා කරන්නේ නම් compileහෝ api. අපගේ ඇන්ඩ්රොයිඩ් යෙදුමට දැන් myandroidcomponentපරායත්තතාවයට ප්රවේශ විය හැකිය , එය MySecretපන්තියකි.
TextView textView = findViewById(R.id.text_view);
textView.setText(MyAndroidComponent.getComponent());
// You can access MySecret
textView.setText(MySecret.getSecret());
ක්රියාත්මක කිරීම (විකල්පය # 1)

ඔබ implementationවින්යාසය භාවිතා කරන්නේ නම් , MySecretනිරාවරණය නොවේ.
TextView textView = findViewById(R.id.text_view);
textView.setText(MyAndroidComponent.getComponent());
// You can NOT access MySecret
textView.setText(MySecret.getSecret()); // Won't even compile
ඉතින්, ඔබ තෝරාගත යුත්තේ කුමන වින්යාසයද? එය සැබවින්ම ඔබගේ අවශ්යතාවය මත රඳා පවතී.
ඔබ නම් පරායත්තයන් හෙළිදරව් කිරීමට අවශ්ය භාවිතය apiහෝ compile.
පරායත්තතා හෙළි කිරීමට ඔබට අවශ්ය නැතිනම් (ඔබේ අභ්යන්තර මොඩියුලය සැඟවීම) භාවිතා කරන්න implementation.
සටහන:
මෙය ශ්රේණියේ වින්යාසයන්ගේ සාරාංශයක් පමණි, වගුව 49.1 බලන්න. ජාවා පුස්තකාල ප්ලගිනය - වඩාත් සවිස්තරාත්මක පැහැදිලි කිරීම සඳහා පරායත්තතා ප්රකාශ කිරීමට භාවිතා කරන වින්යාසයන් .
මෙම පිළිතුර සඳහා නියැදි ව්යාපෘතිය https://github.com/aldoKelvianto/ImplementationVsCompile වෙතින් ලබා ගත හැකිය